Collection集合框架

什么是集合框架

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。


数组、对象数组、集合框架的特点与区别

数组:用于存放同一基本数据类型(值类型)元素的组合

对象数组:用于存放同一对象类型元素的组合

集合框架:动态的数组对象

集合只能存储对象,经常犯的错误:集合可以存储整型之类的基本数据类型,其实那是通过自动装箱,拆箱机制,转为了Integer对象。


区别:

数组不能动态扩张,定义时必须指定长度,长度不可变;

集合则无需指定长度,可动态扩张,长度可变。

为什么需要集合框架?

如果不知道程序运行时需要多少对象,或者需要更复杂方式存储对象,可以使用集合框架。

Collection集合框架用来存储和操作不同类型的对象组


集合框架的体系


 Collection接口

Collection主要有三个子接口:

Set——表示不允许有重复元素的集合

List——表示允许有重复元素的集合

Queue——队列,JDK1.5新增,与上面两个集合类主要是的区分在于Queue主要用于存储数据,而不是处理数据。队列是一种特殊的线性表,先进后出

Stack——继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的pushpop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈

 List接口

特点:

1)和数组类似,可以动态增长;

2)有序,对象可以重复;

3)查找元素效率高,插入删除元素效率低(会引起其他元素位置改变)。

遍历方式:

1)下标

2foreach>=JDK 1.5

3)迭代器Iterator

优化:

(1)默认长度为0,初始容量1050%延长,相对节约空间。

对应类有:ArrayListLinkedListVector

(1)ArrayList:动态数组,是线程不同步的,查询速度快,但是增删慢。

优化:创建ArrayList的时候指定初始容量 new ArrayList<>(50); //初始指定50长度


增长方式:n*3/2+1

(2)LinkedList:链表、队列、堆栈,查询慢,增删快

(3)Vector:是一种老的动态数组,是线程同步的,安全且效率很低,一般不赞成使用

长度为10,当超过10时,100%延长,变为20个(有点浪费空间)。

Set接口

特点:

1)无序,对象不可以重复(eqauls——eqaulsObject继承,默认比较的地址);

2)查找元素效率低,插入删除元素效率高(不会引起元素位置改变)。

遍历方式:

1foreach

2)迭代器

对应类有:HashSet、TreeSet。

(1)HashSet:以哈希表的形式存放元素,插入删除速度很快。

2TreeSet:根据某种(规则)对里面的元素进行排序。

规则1: java.lang.Comparable

规则2: java.util.Comparator


Map接口

特点:

(1)无序、以键值对的形式添加元素,键不能重复,值可以重复

遍历方式:

(1)先取出保存所有键的Set,再遍历Set即可(2)。

(2)先取出保存所有EntrySet再遍历此Set即可

    快速遍历Map:遍历保存Entry,省略根据key取值

            Map<String,String>  map = new HashMap<String,String>();

            Map.put.....;

            For(Map.Entry<String,String>  entry  :  map.entrySet()){

                System.out.println(entry.getKey()+” = ”+entry.getValue());

            }


对应类有:HashMapTreeMapHashtableLinkedHashMap

(1)HashMap:根据键的HashCode值存储数据,查询快,最多允许一个键为NULL,多个值为NULL

线程不同步

(2)HashtableHashMap类似,但它不允许键或值为NULL支持线程的同步即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢)。

(3)TreeMap:根据键排序(默认升序),也可指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的

(4)LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历 的时候会比HashMap慢。

Map并不是一个真正意义上的集合,但是这个接口提供了三种“集合视角”,使得可以像操作集合一样操作。

定义、增加、删除、修改、查找

 Collections

排序

//sort方法进行简单排序,默认升序

Collections.sort(集合名称);

//复杂对象排序

List<Student> li = new ArrayList<>();
li.add(new Student("5张三", 1, "男"));
li.add(new Student("1张三", 1, "男"));
li.add(new Student("2张三", 1, "男"));
li.add(new Student("3张三", 1, "男"));
li.add(new Student("4张三", 1, "男"));

                Collections.sort(li);

//得在实体类继承Comparable,

重写

@Override
public int compareTo(Student o) {

// TODO Auto-generated method stub

return this.getName().compareTo(o.getName()); //根据姓名排序
}

反转

//Collections.reverse(li);

交换

//Collections.swap(li, 0, li.size()-1);

取最大最小

//Collections.max(lc);

//Collections.min(lc);

复制

Collections.copy(新集合, li);//注意复制时新的集合长度必须大于等于要复制的集合长度,如果长度为0时报错

其它

   5.1 Iterator(迭代器):遍历集合List/Set

       hasNext

       next

       remove:在遍历集合,并同时需要删除集合中的元素时,建议使用

               Iterator.remove

   5.2 java.lang.Comparable:自然排序接口

   5.3 java.util.Comparator:比较器接口

   5.4 Collections:工具类,提供一组静态方法操作Collection集合

       Arrays:工具类,提供了一组静态方法操作数组

泛型

以类型作为参数的类就叫泛型。

作用:提高程序健壮性,简化代码

泛型的默认值是Object

装箱、拆箱

值类型->引用类型 装箱

引用类型->值类型 拆箱

JDK1.5之后引入了自动装箱及自动拆箱功能




猜你喜欢

转载自blog.csdn.net/qq_40369944/article/details/80195485