一、集合的顶层是Collection,结构

---|Collection: 单列集合

  ---|List: 有存储顺序, 可重复 

    ---|ArrayList:  数组实现, 查找快, 增删慢

      由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素,所以慢。

      数组是可以直接按索引查找, 所以查找时较快 。

    ---|LinkedList: 链表实现, 增删快, 查找慢 

      由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素,

      后一个元素记住前一个元素,这样的增删效率较高但查询时需要一个一个的遍历, 所以效率较低。

    ---|Vector: 和ArrayList原理相同, 但线程安全, 效率略低 

      和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低。

  ---|Set: 无存储顺序, 不可重复

    ---|HashSet 

    ---|TreeSet 

    ---|LinkedHashSet 

---| Map: 键值对 

  ---|HashMap 

  ---|TreeMap 

  ---|HashTable 

  ---|LinkedHashMap

二、Collection接口的共性方法

1:增加

  add() 将指定对象存储到容器中,可以是不同类型元素,add方法的参数类型是Object 便于接收任意对象 

  addAll() 将指定集合中的元素添加到调用该方法和集合中 

2:删除

  remove() 将指定的对象从集合中删除 

  removeAll() 将指定集合中的元素删除 

3:修改 

  clear() 清空集合中的所有元素

4:判断 

  isEmpty() 判断集合是否为空 

  contains() 判断集合何中是否包含指定对象           

  containsAll() 判断集合中是否包含指定集合,使用equals()判断两个对象是否相等

5:获取

  int size()    返回集合容器的大小

6:转成数组

  toArray()   集合转换数组

三、List特有方法

1:增加 

  void add(int index, E element) 指定位置添加元素             

  boolean addAll(int index, Collection c) 指定位置添加集合   

2:删除 

  E remove(int index) 删除指定位置元素   

3:修改 

       E set(int index, E element)    返回的是需要替换的集合中的元素 

4:查找: 

  E get(int index)             注意: IndexOutOfBoundsException 

  int indexOf(Object o)         // 找不到返回-1 

  lastIndexOf(Object o)  

5:求子集合 

  List<E> subList(int fromIndex, int toIndex) // 不包含toIndex

四、Collection+List的例子:

1:Person类

姓名和年龄。

重写hashCode和equals方法:

(1)如果不重写,调用Object类的equals方法,判断内存地址,为false

如果是Person类对象,并且姓名和年龄相同就返回true

Collection中的contains()和containsAll()都会调用Person中重写的equals()方法判断是否相等

(2)如果不重写,调用父类hashCode方法

如果equals方法相同,那么hashCode也要相同,二者一致,需要重写hashCode方法

重写toString方法:

不重写,直接调用Object类的toString方法,打印该对象的内存地址

2:testCollection类main方法,测试Collection和List

3:代码:

https://github.com/ssyybbiill/java_practise/tree/master/src/main/java/com/example/java_practise

 

 

参考:https://www.cnblogs.com/joyco773/p/6759981.html

 

posted on 2020-09-26 21:36  西伯尔  阅读(88)  评论(0编辑  收藏  举报