java 集合
来源:互联网 发布:smb端口 编辑:程序博客网 时间:2024/06/16 11:07
在API中,应用最多的类集中,集合算是其中之一了。下面就集合进行简单的描述,先上个图,理下集合中的类之间的关系。
一、Set、List、Map的区别:
(1)set-保证成员唯一 , 支持数学中的集合操作,如交、并;(不考虑极端的作法将compareTo与compare方法中,两者相同也不返回0的) (无序的,不可以重复且没有索引)
(2)list-支持成员顺序,提供按索引访问成员; (有序的,且可以重复,集体中用索引)
(3)Map-成员为键值对,提供按键对象查找值对象
二、Collection与Map的区别
Map并没有实现Collection接口,因为Collection类型中每个位置都是单独的一个个,而Map类型,是pair成双的有Key-Value对的,更像个小型数据库。
注意集合中的存储都是对象的引用(地址),并不是把元素对象存入对集合中。 Collection集合中取出元素是用迭代 Iterator接口的方式来搞定。
三、Set集合
Set接口提供了一系列的方法,子类在实现时提供了一个简单的抽象类AbstractSet类,此类实现了简单的removeAll(Collection agr)等方法。使得子类TreeSet与HashSet只需要继承AbstractSet即可。
TreeSet:是一种有序的结构类似二叉树结构,使得外部可以有序地遍历成员;附加实现了 SortedSet, 支持子集等要求顺序的操作。但对TreeSet中的成员要实现Comparable或者使用Comparator来构造TreeSet。
HashSet:是一种无序的结构,它依靠hashCode方法。hashCode方法是从Object类中函数过来的,默认是按地址散列着。所以若想实现类的属性值都是一致时,认为两个对象是相同要不存储在HashSet中,则需要覆盖hashCode方法。有个原则是 若equals相同时,则hashCode是相同的。其实重写HashCode只是为了提供效率,本质上比较还是equals,由于有了hashCode方法使得对象在比较时基本上在hashCode方法中就可以得出是否相同了。 (注意hashCode方法使用不当会造成内存泄露着,比如先把对象add进HashSet后,又用此对象引用将对象属性值改变了,接着用remove方法时,并没有删除掉。因为remove中的hashCode与原有的add时的hashCode不相等找不到原有对象了)
四、List集合
List提供了基于索引的方式来访问集合中的元素,且List集合有中个特有的迭代器ListIterator,需要注意的是在迭代时不要用集合对象中的方法(如add、remove等方法)操作集合中的元素,因为会发现ConcurrentModificationException。与AbstractSet类似,List也提供了AbstractList抽象类。List集合可添加重复或null元素哦。
ArrayList:底层是数组结构,查询快,但增删稍慢。它是线程不同步的。
ListedList:底层是链接结构,增删快,查询慢。
Vector:底层也是数组结构。但线程是同步的,它是JDK1.0 出来的,现在基本上被ArrayList取代了。
Stack :这个类从Vector派生而来,并且增加了方法实现栈,一种后进先出的存储结构。
五、Map集合
Map提供了以键值对的方式,一对一对的往里面存储,且保证键的唯一性。Key键决定了此Key-Vaule在映射中的存储位置。
Hashtable:底层是哈希表结构,null不能作为键或值存在,它是线程同步的。
HashMap:底层也是哈希表结构,允许使用null作为键或值,它是线程不同步的。
TreeMap:底层是二叉树结构,可以用于给Map集合中的Key进行排序。
Properties:是继承自Hashtable,具有Map集合特别,但里面存储的键值都是字符串,它是集合中与IO技术相结合的集合容器。特别是用于键值对形成的配置文件,可用相应的load(InputStream is)及store(OutputStream os,String notes)
六、Arrays与Collections
Arrays与Collections都是工具类,可对数组与集合提供了功能强大的操作,所以它们的方法几乎都是静态方法。
Collections可对Collection进行增加排序、反序最大最小等等操作。
- Java集合:集合框架
- java集合---set集合
- JAVA 集合 的 集合
- 【集合】Java集合对比
- JAVA集合-Map集合
- JAVA集合-Set集合
- JAVA集合-List集合
- java集合------Map集合
- Java集合----List集合
- Java集合----Set集合
- Java集合----Map集合
- JAVA集合
- JAVA集合
- Java集合
- JAVA集合
- Java集合
- Java集合
- java 集合
- LINK : fatal error LNK1104: cannot open file''**.lib'' 和 error LNK2001:
- gstreamer开发
- js 省市联动
- bridge 桥接模式 和 strategy模式的区别
- Win7 硬盘分区建议
- java 集合
- iPhone 开发苹果官方中文站
- poj1840 Eqs
- 展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
- 基于AT91RM9200与LINUX2.6.26内核的嵌入式平台开发全过程
- ZOJ 3614 Choir
- 欧洲各国放假时间
- 最短路径dijkstra算法
- CreateToolhelp32Snapshot