集合类

一、集合类概述
集合与数组的不同之处:
    1. 数组长度是固定的,集合的长度是可变的
    2. 数组用来存放基本类型的数据,集合用来存放对象的引用
常用的集合有List集合、Set集合和Map集合,其中List与Set继承了Collection接口,详见图“常用集合类的继承关系”
 
二、Collection接口
  • Collection接口是层次结构中的根接口。构成Collection的单位称为元素。Collection接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法。由于List接口与Set接口都继承了Collection接口,因此这些方法对List与Set集合是通用的。
//Collection接口的常用方法
add();
remove();
isEmpty();
iterator();
size();
  • 如何遍历集合中的每个元素?通常遍历集合,都是通过迭代器(Iterator)来实现。迭代出来的元素都是原来集合元素的拷贝。Java集合中保存的元素实质是对象的引用,而非对象本身。
public static void main(String[] args) {
    Map <String,String>map = new HashMap<>();
    map.put("熊大", "棕色");
    map.put("熊二", "黄色");
 
    Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
    while(entries.hasNext()){
        Map.Entry<String, String> entry = entries.next();
        System.out.println(entry.getKey() + ":" + entry.getValue()); //熊大:棕色
    }
 
    Collection<String> list = new ArrayList<>();
    list.add("aaa");
    list.add("bbb");
 
    Iterator<String> it = list.iterator();
    while(it.hasNext()){    //判断是否有下一个元素
        System.out.println(it.next());  //获取集合中元素(对象)并输出
    }
}
 
三、List(列表)
  • List的特征是其元素以线性方式存储,集合中可以存放重复对象。
  • List接口继承了Collection接口,包含其中的所有方法,此外List接口还定义了以下两个非常重要的方法:
    1. get(int index);    //获得指定索引位置的元素
    2. set(int index, Object obj);    //指定索引位置对象为指定对象
  • List接口的常用实现类有ArrayList与LinkedList
    1. ArrayList类实现了可变数组,允许保存所有元素,包括null。
      1. 优点:可以根据索引位置对集合进行快速随机访问,
      2. 缺点:向指定的索引位置插入对象或删除对象速度较慢。
    2. LinkedList类采用链表结构保存对象,
      1. 优点:向集合中插入、删除对象时,使用LinkedList类实现的List集合效率较高,
      2. 缺点:但对于随机访问集合中的对象,使用LinkedList类实现List集合效率较低。
public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
 
    int i = (int)(Math.random()*list.size());
    System.out.println(list.get(i)); //输出随机值
    list.remove(i); //移除元素
 
    for (int j = 0; j < list.size(); j++){
        System.out.println(list.get(j)); //输出
    }
}
  • 将字符串转为List集合
String str = "aaa,bbb,ccc";
List<String> list = Arrays.asList(str.split(","));
 
四、Set(集合)
  • Set是最简单的一种集合。集合中的对象不按特定的方式排序(存入与取出的顺序不一定相同),集合中没有重复对象(可以用来去重)。
  • Set接口继承了Collection接口,包含其中的所有方法
  • Set接口常用的实现类有HashSet 和 TreeSet
    • HashSet类
    • TreeSet类
public static void main(String[] args) {
    Set set = new HashSet();
    set.add("世界军事");
    set.add("兵器知识");
    set.add("兵器知识");
    set.add("舰船知识");
    set.add("汉和防务");
 
    Iterator it = set.iterator();
    while (it.hasNext()) {
        System.out.println(it.next()); //Set 集合存和取的顺序不一致。
    }
}
 
五、Map(映射)
  • Map接口常用的实现类有HashMap和TreeMap
    1. HashMap类
    2. TreeMap类
Map接口中的常用方法
put();
containsKey();
containsValue();
get();
keySet();    //返回该集合中所有Key对象形成的Set集合
values();    //返回该集合中所有值对象形成的Collection集合
 
public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();
    map.put("01","aaa");
    map.put("02","bbb");
 
    Set<String> set = map.keySet();
    Iterator<String> it = set.iterator();
 
    while (it.hasNext()) {
        System.out.println(it.next());
    }
 
    Collection <String> coll = map.values();
    it = coll.iterator();
 
    while (it.hasNext()){
        System.out.println(it.next());
    }
}
 
六、CollectionUtils(Java集合类工具)的操作方法
  • 集合判断
//例1: 判断集合是否为空:
CollectionUtils.isEmpty(null): true
CollectionUtils.isEmpty(new ArrayList()): true
CollectionUtils.isEmpty({a,b}): false
 
//例2: 判断集合是否不为空:
CollectionUtils.isNotEmpty(null): false
CollectionUtils.isNotEmpty(new ArrayList()): false
CollectionUtils.isNotEmpty({a,b}): true
  • 2个集合间的操作
//2个集合间的操作:
//集合a: {1,2,3,3,4,5}
//集合b: {3,4,4,5,6,7}
 
CollectionUtils.union(a, b)(并集): {1,2,3,3,4,4,5,6,7}
CollectionUtils.intersection(a, b)(交集): {3,4,5}
CollectionUtils.disjunction(a, b)(交集的补集): {1,2,3,4,6,7}
CollectionUtils.disjunction(b, a)(交集的补集): {1,2,3,4,6,7}
CollectionUtils.subtract(a, b)(A与B的差): {1,2,3}
CollectionUtils.subtract(b, a)(B与A的差): {4,6,7}
 
 
posted @ 2020-07-05 12:24  Duomen  阅读(171)  评论(0编辑  收藏  举报