前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA中的集合小结

JAVA中的集合小结

原创
作者头像
帅的一麻皮
修改2020-06-24 14:53:59
1.6K0
修改2020-06-24 14:53:59
举报

1.Collection接口

Collection是最基本的集合接口,声明了适用于JAVA(List和Set)集合的通用方法

collection接口的方法:add()、clear()、iterator()、remove()、toArray()等(详细查阅API)。

Iterator接口声明方法:hasNext()、next()、remove()。

2.Set(集合)

Set是最简单的一种集合,无序,没有重复对象。

Set接口主要实现了两个实现类:

  • HashSet:内部封装的是HashMap的方法,HashSet类按照哈希算法来存集合中的对象其实是存到了HashMap的键的位置,存取速度比数组更快。

原理:当元素需要存进哈希表之前,先会计算这个元素的哈希值,存到对应的位置上,当其他的元素与前面元素哈希值相同 时,会去使用equals方法进行判断,两个元素的内容是否一致,如果内容不一致,则使用拉链法存储元素。hashCode() equals()

  • TreeSet:TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序,使用二叉树结构。

原理:使用对象的比较方法,如果对象的比较方法返回为0,则视为元素重复,则不存储。

Set的用法:存放的是对象的引用,没有重复对象。

3.List(列表)

List的特征是其元素以线性方式存储,集合中可以存放重复对象。

List接口主要实现类包括:

  • AarrayList():数据结构:长度可变(创建新数组+复制数组)数组,查询快,增删慢,不同步。
  • LinkedList():链接列表:增删快,查询慢,不同步。

LinkedList具有以下方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

堆栈:先进后出 First In Last Out 队列:先进先出 First In First Out

4.Map(映射)

map是一种把键对象和值对象映射的集合,他的每一个元素都包含一对键对象和值对象。Map没有继承于Collection接口,从Map集合中检索元素时候,只要给出键对象,就会返回对应的值对象。

map中的方法:

put(键,值): put方法返回的value是返回键对应的旧值,如果没有则返回null,map集合如果键相同,值就会覆盖。

get(键):通过给定的键获取对应的值,如果键不存在,返回null。

remove(键):删除元素,一次删一对

获取map集合中的所有的数据:

1.keySet():获取map中所有的键,方法返回set集合,因为map中的键是惟一的。

有了所有的键,便可以通过迭代器或者使用foreach取出其中所有的值。 2.entrySet():返回set集合,Set<Map.Entry<K,V>>。

例:Set<Map.Entry<String,String>> entrySet = map.entrySet();
   //用迭代器
    Iterator<Map.Entry<String,String>> it= entrySet.iterator();
    while(it.hasNext()){
      //遍历set集合中的映射关系
      Map.Entry<String,String> me = it.next();
      //通过映射关系获取所有的键和值
      String key =me.getKey();
      String value=me.getValue();
    }
   //用foreach
   for(Map.Entry<String,String> me : map.entrySet()){
     String key =me.getKey();
     String value  = me.getValue();
   }

map中的实现类:

  • Hashtable:数据结构:哈希表,同步的(效率低),不允许有null作为键和值
  • HashMap:数据结构:哈希表,允许有null作为键和值,不同步
  • TreeMap:数据结构:二叉树结构,不同步,查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。

5.关系特征总结:

Collection :

--List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。

--ArrayList / LinkedList / Vector

--Set:不能含有重复的元素

--HashSet / TreeSet

Map:

--HashMap

--HashTable

--TreeMap

特征:

List,Set,Map将持有对象一律视为Object型别。

Collection、List、Set、Map都是接口,不能实例化。

继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。

总结:

1. 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

2. 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。

3. 在除需要排序时使用TreeSet,TreeMap外,都应使用HashSet,HashMap,因为他们 的效率更高。

4. 要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。

Reference:

https://blog.csdn.net/SpeedMe/article/details/22398395?utm_source=distribute.pc_relevant.none-task

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Collection接口
  • 2.Set(集合)
  • 3.List(列表)
  • 4.Map(映射)
  • 5.关系特征总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档