1.单列集合框架结构

  • Collection接口:单列集合,用来存储一个一个的对象
  • List接口:存储有序的、可重复的数据。 -->“动态”数组
  • ArrayList、LinkedList、Vector
  • Set接口:存储无序的、不可重复的数据
  • HashSet、LinkedHashSet、TreeSet

conda查看某个env的python版本 conda env list_java

2.Collection集合常用方法

  • boolean add(E e) 向集合中添加一个元素,添加成功则返回true
  • boolean addAll(Collection c) 将给定集合中的所有元素添加到当前集合中,当方法调用后当前集合元素发生了变化则返回true
  • int size() 返回当前集合的元素个数
  • boolean isEmpty() 判断当前集合是否为空集,当且仅当size为0时,返回值为true
  • void clear() 清空集合
  • boolean contains(Object o) 是否包含指定元素o,判断依据时该元素是否与集合现有元素存在equals比较为true的,如果存在则认为包含。
  • boolean containsAll(Collection c) 判断当前集合是否包含指定集合(全包含)
  • boolean remove(Object o) 删除指定元素o,remove方法删除元素时也是删除与集合元素equals比较为true的元素,如果元素本身没有重写 equals则比较的是地址值。注意:对于List集合而言,重复元素仅会删除一次。
  • boolean retainAll(Collection c) 取交集,仅保留当前集合中与给定集合的共有元素到当前集合中
  • boolean removeAll(Collection c) 删除当前元素与给定元素的共有元素(删交集)
  • Iterator iterator() 返回此集合的迭代器,用于遍历集合

3.集合转数组

集合 —>数组:toArray()
传入的数组类型应当与集合元素类型一致。而数组长度没有要求。
toArray的原则是传入的数组能用(length>=size)时就直接使用该数组
否则自行创建一个与集合size一样长,类型与传入的数组类型一致的数组并返回

<T> T[] toArray(T[] a)

    //示例:集合c的size=5  
   // String[] array = c.toArray(new String[c.size()]);array.length = 5
//    String[] array = c.toArray(new String[10]);array.length = 10
      String[] array = c.toArray(new String[0]);//array.length = 5

4. 数组转集合

数组 —>集合:调用Arrays类的静态方法asList(T … t)
只能转换为List集合
在转为List集合后,对集合的操作就是对原数组的操作(对原数组操作也会改变集合),由于数组是定长的,只能使用集合的set方法,不能使用增(add)删(remove)操作,使用增删操作会抛出:java.lang.UnsupportedOperationException异常

public static <T> List<T> asList(T... a)

5.Collections集合工具类

  • public static void reverse(List<?> list) 反转List集合
  • public static <T extends Comparable<? super T>> void sort(List list) 对List集合进行自然排序

6.Iterator迭代器

主要作用:遍历集合

  • boolean hasNext() 判断是否有下一个元素,从第一个元素之前开始判断,有下一个元素则返回true
  • E next() 返回迭代的下一个元素,只要调用此方法,指针就会向后移动,一般配合hasNext方法使用。
  • void remove() 从集合中删除迭代器当前位置对应的元素,即next方法获取的元素。(可选)

使用实例:

public class IteratorDemo2 {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("1");
        c.add("#");
        c.add("2");
        c.add("#");
        System.out.println(c);//[1,#,2,#]
        Iterator<String> iterator = c.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            if ("#".equals(next)){
                //迭代器采取快速失败原则,要求:使用迭代器遍历集合的过程中不能通过集合
                //的方法增删元素,否则会抛出异常:java.util.ConcurrentModificationException
                //c.remove(next);
                iterator.remove();
            }
        }
        System.out.println(c);//[1,2]
    }
}

7.List集合

由于List存储的特点是有序的、可重复的,因此可以利用角标进行相关操作。

除开父类Collection集合提供的方法外,List集合还有以下方法:

  • E set(int index , E e) 将给定元素e设置到指定下标index处。返回值为集合index处被替换的元素。实际上就是做替换元素操作
  • void add(int index,E e) 在指定位置index处插入一个元素e
  • E remove(int index) 移除指定角标上的元素,返回被移除的元素
  • List subList(int fromIndex, int toIndex) 获取该List集合的子集,含前 不含后,对子集的任何操作,就是对原集合对应元素的操作,会影响原集合

对List集合的排序 Collections.sort()

方式一:sort方法在排序List集合时,要求集合元素必须实现Comparable接口,但是这种方式会对我们的代码造成侵入性

方式二:定义匿名内部类Comparator,重写compare()方法,在该方法内定义比较的方式,然后将该比较器传给(重载的方法)Collections.sort(集合,比较器)