欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java集合总结

程序员文章站 2024-03-02 21:16:04
集合和数组在存储数据的时候是各有优缺点的,先总结下集合和数组的区别 1.数组长度固定,集合长度不固定 2.数组只能存储同一类型的元素,集合可以存储不同数据类型(在引入泛...

集合和数组在存储数据的时候是各有优缺点的,先总结下集合和数组的区别

1.数组长度固定,集合长度不固定

2.数组只能存储同一类型的元素,集合可以存储不同数据类型(在引入泛型后,可以规定元素的类型相同)

3.数组可以存储基本类型也可以存储引用类型,集合只能存储引用类型

集合类由两大接口派生而出:collection<e>和map<k,v>

collection<e>:是接口,需要由实现类去实现接口,存储单列元素。

它的主要方法:

添加:boolean add(e e)  移除:boolean remove(object o)  判断是否包含某元素:boolean contains(object o)  返回集合中元素的个数:int size()   判断集合是否为空:boolean isempty()  迭代器:iterator<e> iterator()  是collection集合特有的一种遍历方式,实现了iterable<e>接口,使用boolean hasnext():如果迭代器中还有元素,则返回true。和e next():返回迭代器中的下一个元素  这两个方法进行遍历

它的子接口:list<e>set<e>queue<e>。list集合中元素是有序不唯一的(有序是指存储有序但不是排序),set集合中元素是无序但唯一的。

list<e>集合的实现类:

  • arraylist:底层数据结构是数组,查询快,增删慢;线程不安全,效率高;
  • vector:底层数据结构是数组,查询快,增删慢;线程安全,效率低;
  • linkedlist:底层数据结构是联邦,查询慢,增删快;线程不安全,效率低。
  • queue<e>:底层数据结构是队列,类似于list(queue接触较少,后面不做总结)

set<e>集合的实现类:

hashset:底层数据结构是哈希表,依赖hashcode()方法和equals()方法。这两个方法的执行顺序:先hashcode(),值不同:添加;值相同:equals()值,不同:添加;相同:不添加。 其子类linkedhashset,底层数据结构由哈希表及链表构成,链表保证元素有序,set保证元素唯一。

treeset:底层数据结构是红黑树,是一种自平衡的二叉树。元素排序(是排序不是有序!)

排序分为自然排序和比较器排序。自然排序:元素具备比较性,元素所属类实现接口comparable即可,比如我们平常使用的integer,string都已实现comparable接口;比较器排序:如果元素是自定义类时,需要按需求对元素进行排序,比如按自定义类中的某个成员变量的大小进行排序,此时需要集合接收一个comparator的实现类对象,可采用匿名内部类或外部类去重写compare()方法。

map<k,v>:是一个接口,k是键 ,v是该键对应的值,存储的元素是键值对,也就是成对存在的,存储双列元素。键不能重复,每一个键最多映射一个值。

它的主要方法:

添加:v put(k key,v value)   删除:v remove(k key,v value)   判断:1).boolean containskey(object o):是否包含某个键;2).boolean containsvalue(object o):是否包含某个值;3).boolean isempty():是否为空  获取:1) set<k> keyset() 获取所有键的视图  2) v get(object key) 返回改建对应的值  3) int size() 获得该集合的键值对的对数

map集合的遍历方式:

1)键找值:将所有的键获取到一个集合set中,再遍历该集合获取对应的值

2)由键值对对象找键和值:获取所有的键值对对象到集合中,再遍历该集合获得每一个键值对的键和值

map常用的实现类与set的实现类类似:

  • hashtable:类似hashset,线程安全,效率低,被hashmap替代;
  • hashmap:类似hashset,线程不安全,效率高;
  • linkedhashmap:类似linkedhashset;
  • treemap:类似setmap

注意:map集合的数据结构仅对键有效,与值无关。

判断使用哪个集合:

是否是键值对形式的元素?

是:map

是否需要排序?

是:treemap

否:hashmap

否:collection

是否唯一(或有序)

不唯一,有序:list

数据结构:数组:arraylist(线程不安全,效率高);vector(线程安全,效率低)

链表:linkedlist(线程不安全,效率高);

唯一,无序:set

是否排序?

是:treeset

否:hashset

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接