10.集合

2022-04-27  本文已影响0人  星野君
  1. 集合主要分为两组,单列集合(Collection )和双列集合(Map)
  2. Collection 接口有两个重要的子接口 List Set , 他们的实现子类都是单列集合
  3. Map 接口的实现子类 是双列集合,存放的 K-V
  4. List 是有序的,set是无序的


    image.png image.png

一、List
1.ArrayList: 有序、非线程安全、值可以为null、值可以重复,底层实现Object数组,它实现了Serializable接口,因此它支持序列化;优点:查询快,插入、删除慢;

List list = new ArrayList();
list.add("jack");
list.add(10);
list.remove(0);//删除第一个元素
System.out.println(list.size());//1
System.out.println(list.isEmpty());//判断是否为空

//迭代器遍历方式:
    Iterator iterator = list.iterator();
    while (iterator.hasNext()) {
      Object obj = iterator.next();
    }
list.iterator();//重置迭代器

//增强for循环
    for (Object o : list) {
      System.out.println(o);
    }
  1. List集合中是有序的,插入和取出都是有序拿出
  2. List集合中每个元素都有一个对应整型的顺序索引
  3. ArrayList是可以插入多个null
  4. ArrayList是通过数组实现的

2.vector:跟ArrayList结构相似,是线程安全的,加了synchronized

    Vector vector = new Vector();
    vector.add("1");
    vector.add("xxx");
    for (Object o : vector) {
      System.out.println(o);
    }
  1. linkedList:有序、非线程安全、底层实现是链表,插入、删除快,查询效率不高
    LinkedList linkedList = new LinkedList();
    linkedList.add(1);
    linkedList.add(2);
    linkedList.add(3);
//这里默认删除的是第一个结点
linkedList.remove();
//修改某个结点对象 
linkedList.set(1, 999);

如果改查的操作多,选择ArrayList,增删的操作多选择LinkedList

二、set
HashSet:

  1. 无序
  2. 不允许重复元素
    final HashSet<Object> objects = new HashSet<>();
    objects.add(1);
    objects.add(2);
    for (Object object : objects) {
      System.out.println(object);
    }
  1. HashSet实际上是HashMap
  2. Hashset实现了set接口
  3. 可以存放null

LinkedHashSet:

  1. LinkedHashSet是HashSet的子类
  2. LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表
    LinkedHashSet objects = new LinkedHashSet();
    objects.add(1);
    objects.add(2);
    for (Object object : objects) {
      System.out.println(object);
    }

三、Map

  1. map和collection并列存在,是k-value的映射关系
  2. map中的key不允许重复,添加重复的key会直接替换即修改
  3. 常用String类作为map的key
  4. key 和value是一对一的关系

HashMap:

    final HashMap hashMap = new HashMap();
    hashMap.put("k1", "v1");
    hashMap.put("k2", "v2");
    hashMap.put("k3", "v3");
    //使用keyset遍历数据
    final Set set = hashMap.keySet();
    for (Object o : set) {
      System.out.println(hashMap.get(o));
    }

    // 使用entrySet遍历数据
    Set entrySet = hashMap.entrySet();
    for (Object entry : entrySet) {
      Map.Entry m = (Map.Entry) entry;
      System.out.println(m.getKey() + "-" + m.getValue());
    }
  1. HashMap是map里使用最多的
  2. HashMap没有实现同步,因此线程是不安全的

Hashtable:

  1. Hashtable是线程安全的
  2. Hashtable使用方法和HashMap基本一样
  3. Hashtable的key和value都不能为null

Properties:

  1. Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。
  2. 它的特点和Hashtable基本一致
  3. Properties还可以用与从xxx.properties文件,加载Properties类对象,读取数据和修改
image.png

四、Collections工具类

  1. reverse(List)反转list中元素的顺序
  2. sort(List)根据元素顺序自然排序
  3. sort(List Comparator)根据Comparator产生的顺序排序
    4.swap(List,int,int)元素交换
上一篇 下一篇

猜你喜欢

热点阅读