欢迎来到天天文库
浏览记录
ID:57645950
大小:26.97 KB
页数:11页
时间:2020-08-30
《collection中的List和set。map的用法和区别.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Collection 接口的接口 对象的集合 ├List 子接口 按进入先后有序保存 可重复 │├LinkedList 接口实现类 链表 插入删除 没有同步 线程不安全 │├ArrayList 接口实现类 数组 随机访问 没有同步 线程不安全 │└Vector 接口实现类 数组 同步 线程安全 │ └Stack └Set
2、 子接口 仅接收一次,并做内部排序 ├HashSet │ └LinkedHashSet └TreeSet 对于List,关心的是顺序,它保证维护元素特定的顺序(允许有相同元素),使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素。 对于Set,只关心某元素是否属于Set(不允许有相同元素),而不关心它的顺序。 Map 接口 键值对的集合 ├Hashtable
3、 接口实现类 同步 线程安全 ├HashMap 接口实现类 没有同步 线程不安全 │├LinkedHashMap │└WeakHashMap ├TreeMap └IdentifyHashMap 对于Map,最大的特点是键值映射,且为一一映射,键不能重复,值可以,所以是用键来索引值。方法put(Objectkey,Objectvalue)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法ge
4、t(Objectkey)返回与给定“键”相关联的“值”。 Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用LinkedHashSet或者LinkedHashMap. 对于效率,Map由于采用了哈希散列,查找元素时明显比ArrayList快。 但我有一个自己的原则想法:复杂的问题简单化。即把很多晦涩难懂的问题用通俗直白的话,一下子就看明白了,而不是大段大段的写。不得不指出的是现在部分所谓的“专家”往往把简单的问题复杂化,让人看了生畏,甚至望而却步,以此
5、来显示他的高深莫测,当然也可能有别的用意,那我就不得而知了。 更为精炼的总结: Collection是对象集合,Collection有两个子接口List和Set List可以通过下标(1,2..)来取得值,值可以重复 而Set只能通过游标来取值,并且值是不能重复的 ArrayList,Vector,LinkedList是List的实现类 ArrayList是线程不安全的,Vector是线程安全的,这两个类底层都是由数组实现的 LinkedList是线程不安全的,底层是由链表实现的 Map是键值对集合 HashTable和HashMap是
6、Map的实现类 HashTable是线程安全的,不能存储null值 HashMap不是线程安全的,可以存储null值 所以,如果你是想在一个很短的时间来弄明白这些问题,比如1~2分钟。没有也不想花大量时间于此,那么建议你现在就可以收兵走人了。 如果你想对此做一个详细的了解,请继续看下去。 众所周知,Java来源于C++,屏蔽了其底层实现,简化了对底层实现的管理,使开发者专注于上层功能的实现。在C/C++里关于数据的存储需要程序员非常清楚,而Java程序员可以完全不管这些,那么,Java是怎么管理的呢?其实Java还是
7、需要面临这些问题,只不过经过封装后,变得面目全非。所以对于像我这种从C/C++转向Java的人还需要一段时间适应,Collection、List、Set、Map等概念还需要一个接受的过程。其实到后来发现,不管是什么语言,其底层存储不外乎数组、线性表、栈、队列、串、树和图等数据结构。想明白了这些,一切都敞亮了。 一、容器(Collection)接口 容器(Collection)是最基本的集合接口,一个容器(Collection)保存一组对象(Object),即对象是容器的元素(Elements)。一些Collection允许相同的元素
8、而另一些不行。一些能排序而另一些不行。JavaSDK不提供直接继承自Collection的类,JavaSDK提供的类都是继承自Collection的“子接口”如List和Set。
此文档下载收益归作者所有