集合(ArrayList,HashSet,HashMap,泛型)

集合

  • ArrayList
  • HashSet
  • HashMap
  • 泛型

集合:同一类事物放在一起组成了集合。(引用数据类型,这是和数组最大的区别)

 集合:Collection(接口)  父类是Iterable(接口:功能是集合的迭代遍历)

 集合的分类:
 1  List(接口):有序可以重复:常见的实现类:Arraylist(数组实现)LinkedList(链表实现)
 2  set(接口):  无序不重复 常见的实现类: HashSet(哈希表实现) TreeSet(二叉树实现)

ArrayList

ArrayList:
实现了List接口(List继承了Collection接口)

 补充:一个类实现了一个接口,那么我们就要重写这个接口里的(抽象)方法,也就是说,接口里的方法是大家都有的。

 集合里面的方法:主要是增删改查。


 ArrayList:
 1,底层是数组(Object)
 2,ArrayList 元素个数 size() 方法
 3增(添加):add(元素): 数组的长度和size不是一回事,如果size()小于数组长度,直接将元素放入到数组里面。如果size()等于数组长度,会自动扩容。
 4,删(删除):
 remove(元素):删除第一个出现的元素
 remove(索引):删除指定索引位置的元素
 5,改(修改):set(索引,元素)
 6,查(查询):get(索引)


 new IllegalArgumentException("Illegal Capacity: "+initialCapacity);  非法参数异常


 ArrayList和LinkedList的区别:
 1、底层数据结构不一样   数组  链表
 2、ArrayList查询快,增删慢
 3、LinkedList查询慢,增删快
 
 ArrayList集合是我们日常经常使用的主要集合之一
 例子
`public static void main(String[] args) {
        ArrayList<String> objects=new ArrayList<>();
        objects.add("张三");
        objects.add("李四");
        objects.add("王五");
        System.out.println(objects);
        objects.remove(1);
       objects.set(1, "赵六");
        objects.get(1);
        for (String a:objects){
            System.out.println(a);
        }
    }`

HashSet

在这里插入图片描述

hashSet:无序(没有索引) 不重复(可以去重)

 for和foreach的区别:
 1,for可以操作索引,但是语法结构相对复杂
 2,foreach 不可以操作索引,但是语法结构相对简单

 HashSet和HashTable的区别:
 1,HashSet是线程不安全的,效率高,允许null值
 2HashTable是线程安全,效率低,不允许null值
 HashSet<Integer> set=new HashSet<>();
    set.add(1);
    set.add(1);
    set.add(2);
    set.add(3);
    System.out.println(set);
    set.remove(2);
    System.out.println(set);
    set.clear();
    System.out.println(set);


    for (Integer i : set) {
        System.out.println(i);
    }

    Iterator<Integer> iterator = set.iterator();
    while (iterator.hasNext()){
        System.out.println(iterator.next());
    }

    ArrayList<String> names = new ArrayList<>();
    names.add("张三");
    names.add("李四");
    names.add("张三");
    names.add("王五");
    names.add("赵六");
    HashSet<String> set1 = new HashSet<>(names);
    names = new ArrayList<>(set1);
    System.out.println(names);

HashMap

在这里插入图片描述

HashMap:双列集合
new HashMap<k,v> k键 v值 键值对
键是唯一的,值可以重复

 jdk8  HashMap底层是:数组+链表+黑红树
 1,HashMap负载因子: 0.75  元素个数超过数组长度的0.75倍,数组就会扩容2倍
 2,链表的长度超过8,链表就会转换成红黑树。如果红黑树的长度小于6红黑树就会转换成链表。
 3,HashMap的初始容量:16
 HashMap<Object, Object> map=new HashMap<>();
        map.put("张三",18);
        map.put("李四",20);
        map.put("张三",22);
        Object age =map.get("张三");
        System.out.println(age);
        map.remove("李四");
        Set<Object> keySet=map.keySet();
        for (Object key:keySet
             ) {
            System.out.println(key+"---"+map.get(key));

        }

泛型

ArrayList <>放的是泛型,指的是集合里面放入的数据类型
泛型的好处:
省去了从集合中取出数据时的强制类型转换。
加了泛型,就会要求我们放入数据的时候,只能放入该数据类的数据,那么取出来的时候也是这种数据类型。
<>放我们指定的数据类型
Object:是所有类的父类