Collectio
ListSetMap区别记忆
这些都代表了Java中的集合这里主要从其元素是否有序是否可重复来进行区别记忆以便恰当地使用当然还存在同步方面的差异见上一篇相关文章有序否否是否是用二叉树排序否是用二叉树排序使用keyvalue来映射和存储数据Key必须惟一value可以重复允许元素重复否是是否
Collectio
ListAbstractSetSetHashSetTreeSetMapAbstractMapHashMapTreeMap
httptbblogcsd
etTrackBackaspxPostId584112List接口对Collectio
进行了简单的扩充它的具体实现类常用的有ArrayList和Li
kedList你可以将任何东西放到一个List容器中并在需要时从中取出ArrayList从其命名中可以看出它是一种类似数组的形式进行存储因此它的随机访问速度极快而Li
kedList的内部实现是链表它适合于在链表中间需要频繁进行插入和删除操作在具体应用时可以根据需要自由选择前面说的Iterator只能对容器进行向前遍历而ListIterator则继承了Iterator的思想并提供了对List进行双向遍历的方法Set接口也是Collectio
的一种扩展而与List不同的时在Set中的对象元素不能重复也就是说你不能把同样的东西两次放入同一个Set容器中它的常用具体实现有HashSet和TreeSet类HashSet能快速定位一个元素但是你放到HashSet中的对象需要实现hashCode方法它使用了前面说过的哈希码的算法而TreeSet则将放入其中的元素按序存放这就要求你放入其中的对象是可排序的这就用到了集合框架提供的另外两个实用类Comparable和Comparator一个类是可排序的它就应该实现Comparable接口有时多个类具有相同的排序算法那就不需要在每分别重复定义相同的排序算法只要实现Comparator接口即可集合框架中还有两个很实用的公用类Collectio
s和ArraysCollectio
s提供了对一个Collectio
容器进行诸如排序复制查找和填充等一些非常有用的方法Arrays则是对一个数组进行类似的操作
Map是一种把键对象和值对象进行关联的容器而一个值对象又可以是一个Map依次类推这样就可形成一个多级映射对于键对象来说像Set一样一个Map容器中的键对象不允许重复这是为了保持查找结果的一致性如果有两个键对象一样那你想得到那个键对象所对应的值对象时就有问题了可能你得到
f的并不是你想的那个值对象结果会造成混乱所以键的唯一性很重要也是符合集合的性质的当然在使用过程中某个键所对应的值对象可能会发生变化这时会按照最后一次修改的值对象与键对应对于值对象则没有唯一性的要求你可以将任意多个键都映射到一个值对象上这不会发生任何问题r