Java-Collection
来源:互联网 发布:转行做网络运营 编辑:程序博客网 时间:2024/06/14 11:16
一、集合基本特性
1 概述
2 数组与集合区别
3 使用场景
二 、Java集合框架架构图
(UML类图相关说明:http://8aa512c4.wiz03.com/share/s/2aFhb41ayQ4W29lNzu3wxPge3lBgTt0N3A9H2j7Wdu0Ovgo_)
三、Iterator
1 迭代器原理
2 常用方法
3 应用场景
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("world");
list.add("d");
list.add("e");
/*Iterator it = list.iterator();
while(it.hasNext()) {
String str = (String)it.next();
if(str.equals("world")) {
list.add("javaee"); //这里会抛出ConcurrentModificationException并发修改异常
}
}*/
ListIterator lit = list.listIterator();
//如果想在遍历的过程中添加元素,可以用ListIterator中的add方法
while(lit.hasNext()) {
String str = (String)lit.next();
if(str.equals("world")) {
lit.add("javaee");
}
}
Enumeration的速度是Iterator的两倍,也使用更少的内存。Enumeration是非常基础的,也满足了基础的需要。但是,与Enumeration相比,Iterator更加安全,因为当一个集合正在被遍历的时候,它会阻止其它线程去修改集合。 迭代器取代了Java集合框架中的Enumeration。迭代器允许调用者从集合中移除元素,而Enumeration不能做到。为了使它的功能更加清晰,迭代器方法名已经经过改善。
4 ListIterator
5 ListIterator与Iterator的区别?
四、List集合
1 List集合特点
ArrayList: 底层数据结构是数组,查询快,增删慢。线程不安全,效率高。
Vector:底层数据结构是数组,查询快,增删慢。 线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList: 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高。
Vector和ArrayList的区别:
(1)Vector是线程安全的,效率低;ArrayList是线程不安全的,效率高。
(2)共同点:都是数组实现的
ArrayList和LinkedList的区别
(1)ArrayList底层是数组结构,查询和修改快
(2) LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的
使用说明:查询多用ArrayList;增删多用LinkedList;如果都多ArrayList
2 Vector集合特点
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
Vector v = new Vector(); //创建集合对象,List的子类
v.addElement("a");
v.addElement("b");
v.addElement("c");
v.addElement("d");
- //Vector迭代
Enumeration en = v.elements(); //获取枚举
while(en.hasMoreElements()) { //判断集合中是否有元素
System.out.println(en.nextElement());//获取集合中的元素
}
五、Set集合(接口)
1 概述
(1)set集合特点无序,不允许重复。常用的实现类有HashSet ,TreeSet。特点见下图
(2)资料参考:http://blog.csdn.net/zhangweiiou/article/details/48946623
2 HashSet
(1)HashSet继承了AbstractSet实现了Set接口,在底层使用HashMap的key进行元素存储,从而保证了元素的唯一性。
(2)我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数
(3)当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象,如果没有哈希值相同的对象就直接存入集合,如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存
将自定义类的对象存入HashSet去重复
类中必须重写hashCode()和equals()方法
hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
3 TreeSet
a.自然顺序(Comparable)
TreeSet类的add()方法中会把存入的对象提升为Comparable类型
调用对象的compareTo()方法和集合中的对象比较
根据compareTo()方法返回的结果进行存储
b.比较器顺序(Comparator)
创建TreeSet的时候可以指定 一个Comparator
如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
add()方法内部会自动调用Comparator接口中compare()方法排序
调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数
c.两种方式的区别
TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
TreeSet如果传入Comparator, 就优先按照Comparator
Java集合框架中的工具类
1 概述:集合框架中的工具类有Arrays和Collections两种。
2 Arrays: 此类包含了用来操作数组的各种方法如:搜索,排序。
应用场景之 - 数据与集合的转换
String [] strArr = list.toArray(new String[list.size()]);
Integer[]arr = {11,22,33,44,55};
List<Integer> list = Arrays.asList(arr);
集合迭代的三种方式总结
for(type element: array)
{
System.out.println(element);
}
集合中的几个概念
- 【java】【java Collection】Collection
- java Collection
- java collection
- Java Collection
- Java Collection
- Java Collection
- java Collection
- java Collection
- Java Collection
- Java Collection
- Java Collection
- Java Collection
- Java Collection
- Java - Collection
- java Collection
- Java Collection
- Java Collection
- Java Collection
- 【dubbo】负载均衡
- 【Java学习笔记】25:转换流(从字节流到字符流的转换)
- java Calendar类(日历)
- hibernate注解扫描配置
- gogland配置说明
- Java-Collection
- 《三》STM32中断以及中断解析
- Delay Constrained Maximum Capacity Path HDU
- express+monogo实现ToDo Restful Api
- 多对多业务,数据库水平切分架构一次搞定(58沈剑)
- javaEE项目Multipartfile实现文件上传下载并解决上传与下载文件中文乱码的问题
- 百度之星寻找母串
- 关于tensorflow 用于线性回归及MNIST 数字识别中的一些思考及补充
- CyclicBarrier同时执行