集合一

1、集合体系概述
为什么有多种容器:因为存放数据的数据结构不同。
2、Collection集合
方法
第一、add方法的参数类型是Object,以便接受任意类型的对象。
第二、集合中存储的都是对象的引用(地址)。
第三、什么就是迭代器?就是集合取出元素的方式。
迭代器原理:
集合把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素,那么取出方式就被定义成了内部类。
而每一个容器的数据结构不同,所以取出的动作细节也不一样,但是取出动作都有判断和取出的共同点,那么这样就可以抽取出共同点Iterator。
获取集合的取出对象方法,就是通过集合对外提供一个方法iterator();。
import java.util.*;
public class CollectionDemo{
 public static void main(String[] args){
   method_get();
 }
 public static void method_get(){
   ArrayList a = new ArrayList();
   a.add("java1");
   a.add("java2");
   a.add("java3");
   a.add("java4");
   
   //迭代器第一种方法,迭代器对象用完后不销毁内存不好,但常用。
   Iterator it = a.iterator();
   while(it.hasNext()){//获取迭代器,用于取出集合中的元素
    sop(it.next()); 
   }
   //迭代器第二种方法,迭代器对象是局部变量,用完后会释放内存。
   for(Iterator it2 = a.iterator();it2.hasNext();){
    sop(it2.next()); 
   }
 }
 public static void method_retain(){
   ArrayList a = new ArrayList();
   a.add("java1");
   a.add("java2");
   a.add("java3");
   a.add("java4");
   
   ArrayList b = new ArrayList();
   b.add("java1");
   b.add("java2");
   b.add("java5");
   //4、取交集,取出相同的
   //a.retainAll(b);
   //5、删除相同的
   a.removeAll(b);
   
   sop(a);
   sop(b);
 }
 public static void method_base(){
   ArrayList a = new ArrayList();
   //1、添加元素
   a.add("java1");
   a.add("java2");
   
   sop("size:"+a.size());
   sop("原集合:"+a);
   
   //2、删除元素
   //a.remove("java1");
   //清空集合
   //a.clear();
   
   //3、判断元素
   sop("java1是否存在:"+a.contains("java1"));
   sop("集合是否为空?"+a.isEmpty());
   
   sop(a);
 }
 public static void sop(Object obj){
  System.out.println(obj); 
 }
}
3、List特有方法:凡是可以操作角标的方法都是该体系特有的方法。
增:
add(index,element);
addAll(index,Collection);
删:
remove(index);
改:
set(index,element);
查:
get(index);
subList(from,to);
listIterator();
List特有的迭代器,ListIterator是Iterator的子接口。
4、为什么在List中用ListIterator迭代器代替Collection中的Iterator迭代器?
第一、Iterator迭代器只有3个方法:hasNext()、next()、remove()方法。没有增加、修改等方法。当以后程序中需要用到增加元素、修改元素功能时,使用Collection集合中的add()、set()就会出现用集合和迭代器在同时操作对象的情况,这时就会出现ConcurrentModificationException异常。
第二、ListIterator列表迭代器中添加了add()、set()等功能,这样当使用列表迭代器时,就可以保证不需要集合方法就可以完成所有需要的功能,避免集合和迭代器同时操作一个对象元素的情况。
5、Vector集合中的枚举
Enumeration en = v.elements();====>Iterator it = a.Iterator();
枚举就是Vector特有的取出方式。
6、LikedList集合
LinkedList特有方法:
addFirst();
addLast();
removeFirst();
removeLast();
7、ArrayList集合:数组结构
开发中List看需求选择LinkedList、ArrayList;不过一般用ArrayList,因为开发中查询多,增删少。
8、TreeSet集合原理二叉树

9ListSet集合

Collection

|---List:元素是有序的(存入和取出的顺序一致),元素可以重复,因为该集合体系有索引。

|---ArrayList:底层的数据结构使用的是数组结构。特点:查询速度快,但是增删慢。线程不同步。可变长度数组:数组初始化默认长度为10,当长度超过时,50%延长,节约空间。

|---LinkedList:底层的数据结构使用的是链表。特点:增删速度快,查询慢。

|---Vector:底层的数据结构使用的是数组结构。线程同步。被ArrayList替代了。可变长度数组:数组初始化默认长度为10,当长度超过时,100%延长。

|---Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。Set的功能和Collection的功能是一样的。

|---HashSet:底层数据结构是哈希表。线程是非同步的。HashSet是如何保证元素唯一性呢?是通过元素的两个方法,hashCode()和equals()来完成。如果元素的hashCode值相同,才会判断equals是否为true。如果元素的hashCode值不同,不会调用equalsArrayList判断元素是否相同只依赖于equalsSet判断元素是否相同依赖于hashCodeequals。写集合时要覆写hashCode\equals方法。

|---TreeSet:可以对Set集合中的元素进行排序。排序时,当主要条件相同时,一定要判断一下次要条件。底层数据结构是二叉树。保证数据元素唯一性的依据:compareTo方法return0,return -1在二叉树左边,return 1在二叉树右边。

TreeSet第一种排序方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法。这种方式也称为元素的自然顺序或者叫默认顺序。

TreeSet第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是需要的。这时就让集合自身具备比较性。在集合初始化时就有了比较方法。定义了比较器,将比较器作为参数传给TreeSet的构造函数。

当两种排序都存在时,以第二种方式比较器为准。具体步骤是定义一个类,实现Comparator接口,覆盖compare方法。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值