Java集合类
来源:互联网 发布:php自学要多久 编辑:程序博客网 时间:2024/05/16 18:42
Java集合类
1.特点
1.1 Collection
每个“槽”中只能保存一个元素
1.1.1 Set
- 相同数只保存一次
- 除TreeSet外,所有Set均与Collection完全一样
1.1.2 List
- 以特定顺序保存数据
- 尽管List要用的方法都在Collection中,但它与Collection存在着明显不同
1.1.3 Queue
- 不用Collectioin方法
1.2 Map
每个“槽”中能保存两个个元素
* 不必考虑Map尺寸,会自动扩容
2.实现类的具体比较
2.1 ArrayList和LinkedList
- ArrayList:执行操作时性能不同,擅长于随机访问元素,但插入和删除元素较慢
- LinkedList:执行操作时性能不同,操作类型多于ArrayList,插入和删除元素较快,随机访问较慢
2.2 HashSet、TreeSet和LinkedHashSet
加入Set的元素必须定义equals()方法,及其子类也应该有。且Set和Collection一样不保证维护元素的次序
* HashSet:最快获取元素的方式,该Set中元素无顺序。必须定义hashCode()
* TreeSet:该Set中元素有顺序,按照比较结果升序保存元素。必须定义Comparable接口。
* LinkedHashSet:按照添加元素顺序保存元素。和HashSet一样快,也必须定义hashCode()。内部维护链表的顺序是按照插入的顺序;如果遍历时,结果也是按插入的顺序显示。
2.3 HashMap、TreeMap和LinkedHashMap
- HashMap:最快获取元素的方式,该Map中元素无顺序。插入和查询的开销是固定的。可通过构造器设置容量和负载因子,以调整容器性能。其键必须实现equals()方法。
- TreeMap:该Map中元素有顺序,按照比较结果升序保存元素。基于红黑树实现,其内部会被排序(由comparable决定)。且TreeMap是唯一带有subMap()方法的Map,可以返回一个子树。其键必须实现Comparable
- LinkedHashMap:按照添加元素顺序保存元素,并保持了HashMap的查询速度。迭代访问时反而更快,因为它使用链表维护内部次序。
3.接口方法列表
Array
- Arrays.asList():会对原数组产生影响,除非在另一容器中创建副本。
Collection
Collection的子类也有如下方法:
* add():传入一个元素,就算传入一个List也只会增加一个元素
* addAll():传入一个List
* remove()
* removeAll()
* size()
* contains
* containsAll()
* iterator()
* shuffle()
* toArray():将任意地Collection转换为一个数组
Collection中不含有get(),因为Set是自己维护内部顺序的。想要获取Collection元素,只能用迭代器。
List
- get()
- List.indexOf()
Set
Map
- Map.put(key,value)
- Map.get(key)
4.实现类方法列表
ArrayList
LinkedList
- add()、addFirst()和addLast()相同
- removeFirst()和remove()相同
- getFirst()和element()相同
- peek()和poll()相同
5. Foreach和迭代器
5.1 Foreach
对foreach语法来说,只要是数组和实现Iterable的类都可以适用,具体地说:
* 数组可用于foreach,但数组没有实现Iterable
* 任何Collection可用于foreach:因为Collection实现了Iterable,但Map没有。
* 任何实现了Iterable接口的类都可以用于foreach
6.高级特性
事实上,所有的Collection子类型都有一个可以接受另一个Collection对象的构造器。
7.Comparable和Comparator
实现Comparator需要覆盖 compare 方法:
public class Person{ String name; int age}class PersonComparator implements Comparator { public int compare(Person one, Person another) { int i = 0; i = one.name.compareTo(another.name); // 使用字符串的比较 if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果 return one.age - another.age; } else { return i; // 名字不一样, 返回比较名字的结果. } }} Collections.sort( personList , new PersonComparator()) 可以对其排序
实现Comparator需要覆盖 compare 方法:
public class Person{ String name; int age}class PersonComparator implements Comparator { public int compare(Person one, Person another) { int i = 0; i = one.name.compareTo(another.name); // 使用字符串的比较 if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果 return one.age - another.age; } else { return i; // 名字不一样, 返回比较名字的结果. } }} Collections.sort( personList , new PersonComparator()) 可以对其排序
用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,
但是需要修改源代码, 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义
的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自
己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。
- Java集合:集合类详解
- Java集合-常用集合类
- JAVA【集合一】集合类
- JAVA中的集合类
- JAVA中的集合类
- JAVA中的集合类
- Java集合类(整理)
- java集合类
- JAVA中的集合类
- Java集合类笔记
- JAVA中的集合类
- java集合类
- java集合类总结
- JAVA中的集合类 - -
- JAVA中的集合类
- java集合类
- java 集合类
- java中的集合类
- Android 日常开发总结的技术经验 60 条
- 关于C++程序编译出现error C2143: syntax error : missing ';' before 'type'的解决办法
- Java细节
- Linux 下 TC 命令详解与事例
- Java学习提要——System类基本
- Java集合类
- 图片的左右切换
- Java数组
- Java高级教程
- Netty优雅退出机制和原理
- C++抽象类
- http://www.cnblogs.com/xianyulaodi/p/5338359.html
- Mysql注释
- C 语言Socket 实现http 带参数的POST请求