集合框架

集合框架

一、集合概念

对象的容器,定义了对多个对象进行操作的常用方法。可以实现数组的功能

和数组的区别:

  • 数组的长度固定,集合长度不固定
  • 数组可以存储基本类型和引用类型,集合只能存储引用类型

位置在java.util.*;

二、Collection体系集合

  • Collection是该体系结构的根接口,代表一组对象,称为“集合”。
  • List接口的特点:有序,由下标,元素可重复
  • Set接口的特点:无序,无下标,元素不能重复

Collection方法:

  • boolean add (Object obj) //添加一个对象
  • boolean addAll(Collection c) //将一个集合中的所有对象添加到此集合中
  • void clear() //清空此集合中的所有对象
  • boolean contains(Object o)//检查此集合中是否包含o对象
  • boolean equals(Object o)//比较此集合是否与指定对象相等
  • boolean isEmpty()//判断此集合是否为空
  • boolean remove(Object o)//判断此集合是否移除o对象
  • int size() //返回此集合中的元素个数
  • Object[] toArray() //将此集合换成数组

List方法:

  • void add(int index,Object o)//在index位置插入对象o
  • boolean addAll(int index,Collection c)//将一个集合中的元素添加到此集合当中的index位置
  • Object get(int index )// 返回集合中指定位置的元素
  • List subList(int fromIndex,int toIndex)//返回fromIndex和toIndex之间的集合元素

1、List实现类

  • ArrayList:

  • 数组结构实现,查询快,增删慢

  • JDK1.2版本,运行速率快、线程不安全

  • Vector:

  • 数组结构实现,查询快,增删慢

  • JDK1.0版本,运行速率慢、线程安全

  • LinkedList:

  • 链表结构实现,增删快,查询

2、Set实现类

  • HashSet【重点】:

  • 基于HashCode计算元素存放的位置。

  • 当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入

  • TreeSet:

  • 基于排列顺序实现元素不重复

  • 实现了SortedSet接口对集合元素自动排序

  • 元素对象的类型必须实现Comparable接口,指定排序规则

  • 通过CompareTo方法确定是否为重复元素。

三、Map集合

Map接口的特点:

  • 用于存储任意键值对(Key-Value)
  • 键:无序、无下标、不允许重复(唯一的)
  • 值:无序,无下标、允许重复

常用方法:

1、V put(K key ,V value) 将对象存入到集合中,关联键值。key重复则覆盖原值。
2、Object get(Object key) 根据键获取对应的值
3、Set<K> 返回所有key
4、Collection<V> values() 返回包含所有值的Collection集合
5、Set<Map.Entry<K,V>> 键值匹配的Set集合

1、HashMap实现类

特点:线程不安全,运行效率快;允许null作为key或者是value

put方法:

put V put(){
return putVal(hash(key),key,value,false,true)
}

总结

1、HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table调整为16
2、当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容为原来的的2倍,目的是减少调整元素的个数
3、jdk1.8 当每个链表长度大于8,且元素个数大于64时,会调整红黑树,目的是为了提高效率
4、jdk1.8 当链表长度小于8时,调整成链表
5、jdk1.8以前 链表是头插入,jdk1.8以后,链表是尾插入。

2、Hashtable实现类

特点:线程安全,运行效率慢;不允许null作为key或者是value

3、Properties实现类

特点:Hashtable的子类,要求key和value都是String类型,通常用于配置文件的读取

4、TreeMap是实现类

实现了SortedMap接口,可以对key自动排序

posted @ 2021-11-30 17:34  戒爱学Java  阅读(87)  评论(0编辑  收藏  举报