ArrayList 一般用于查询,底层长度可变的数组,每次改变都会创建新的数组,效率低,线程非安全。
LinkedList 采用双向链表的方式,进行数据增删,效率大于AarrayList 。
常用方法
add() 将元素添加到列表中。
contains() 确定某个队列是否在队列当中。
remove ( ) 将某一个对象的引用传递给remove 方法,即移除某一对象。
indexOf () 持一个对象的引用,可获得在列表中的下表位置。
subList () 从大的列表中创出一个新的片段。
retainAall() 是一种有效的交集操作。
removeAall () 移除List 中的所有元素。
get() 取得指定的索引位置。
LinkedList 有上面的方法,并且多出一下几个方法。
getFirst() 返回列表第一个元素而不移除。
peek() 同上
removeFirst() ,poll( ) 移除并返回列表头。
底层结构的区别:
ArrayList 底层是数组,每次数据增长的时候会COPY 一个新的数组,并扩充1.5倍。
LinkedList 底层是双向链表实现的,由两个指针操作,可以快速进行增删操作,但是数据不宜过头,每次添加都创建一个节点对象。
Set 接口:
HashSet : 查询快,存入元素时必须重写hashCode( ) 方法。依赖与HashMap() ,比较原则 , 先比较哈希值,再判断是否equals( )
TreeSet : 保持元素处于排序状态,底层为树结构,可以从Set中提取有序的序列,但元素必须实现Comparable接口,依赖于TreeMap 实现。
LinkedHashSet : 以插入的顺序保持元素,迭代器遍历时会按照插入时的顺序显示,但也必须定义hashCode() 方法。 (通过哈希值来确定元素位置,同时通过链表来维护元素的次序)
TreeSet 一般,默认为自然排序,在TreeSet 集合中新添加元素时,会调用新的元素的CompartTO( ) 方法与集合中元素进行比较。
升序: this.变量.compareTo( obj.变量); this在前,形参引用在后
降序反之:
返回-1,新元素在集合元素的左边,为 1 在右边, 为0 时表示添加失败。
如果TreeSet 集合中添加自定义类必须重写,cpmpareTo(Object obj ) 方法,实现Compareable 接口。
定制排序: TreeSet 绑定一个比较器,比较器是一个接口 Comparator()
通过构造方法绑定,重写Compare( object o1,Object o2)方法。
Map接口:
键值对象映射存储,键不能重复,值可以重复。
1. HasMap 底层是哈希表存储,hash存在与线性表中,链表相结合,每张表头就是hash 地址值。
2. LinkedHashMap 是hashMap 的子类,双向链表维护键值对的顺序。
3. TreeMap 底层采用红黑树结构,对存储的Key-Value 的节点进行排序,保证处于有序状态,自然排序,Comparable 重写CompareTo()方法排序,如果key值是自定义类对象,需让自定义类实现Comparable 接口重写CompareTo( ) 定制排序: 绑定比较器Comparator( )
当在集合中添加键值对时,生成的是一个Entry对象。
Set<Map.Entry<String,Integer>> eset = map.entrySet( );
获取宇哥存放键值对类型【集合中的内部类Entry 】 的集合。
常用方法:
map.get(" key") 根据Key 获取value 值
map.ContainsKey() 判断集合中是否包含某个value 值
map.isEntry( ) 判断是否有键值对,是否为空集合。
Set <?> keySet = map.Set( ) 获取存放key 值对应的集合。
Collection <? > c = map.Values( ); 获取存放Value 值的集合.
刚入门学习的小白,如有错误还请多多指教哈。