目录(?)[-]
- 集合框架体系概述
- CODE
- 迭代器Iterator
- List集合共性方法
- ListIterator
- Vector中的枚举
- 集合
集合框架体系概述
java集合实例讲解图解
集合就是存储对象最常用的一种方式
数据多了需要封装成对象,对象多了也要进行封装,封装的方式有:数组、集合。
容器分很多种,不断地共性抽取,产生一个体系——集合框架。(先看体系顶层)。
为什么会出现这么多的容器:每一个容器存储数据的方式不同,这个存储方式称之为:数据结构。
容器 数组 集合 是否可以存储对象 是 是 长度 固定 可变 是否可以存储基本数据类型 是 否 数组和集合都可以存储对象,但数组的长度是固定不变的,集合的长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
集合可以存储不同类型的对象。
Collection容器也有增、删、改、查
集合中存放的不可能是对象(如果那样存放,集合会很胖),而是存放对象的内存地址(引用)。
一、add方法的参数类型是Object。以便于接收任意类型对象。
二、集合中存储的都是对象的引用(地址)。
添加
al1.add(“”);加入元素
al1.addAll(al2);//将al2所有元素加入到al1中的尾角标。
删除
al1.remove(1);移除1角标位上的元素
al1.remove(“”);移除某元素
al1.clear();清空列表
判断
al1.contains(“”);判断al1是否包含某元素。
al1.isEmpty();判断集合是否为空。
交集
al1.retainAll(al2);判断集合al1和al2是否有交集。并把交集存入al1 。没交集al1为空。取交集
al1.removeAll(al2);//去交集。
修改
al.set(1,”xxxx”); 将1角标位上的元素改为xxxx
获取
al1.get(1); 获取1角标位上的元素
CODE:
[java] view plaincopy- import java.util.*;//s
- class CollectionDemo
- {
- public static void main(String[] args)
- {
- method_2();
- }
- public static void method_2()
- {
- ArrayList al1 = new ArrayList();
- al1.add(“java01″);
- al1.add(“java02″);
- al1.add(“java03″);
- al1.add(“java04″);
- al1.add(“java05″);
- ArrayList al2 = new ArrayList();
- al2.add(“java01″);
- al2.add(“java02″);
- al2.add(“java03″);
- al2.add(“java06″);
- al2.add(“java07″);
- al1.retainAll(al2);//取交集,al1中只会保留和al2中相同的元素。也就是说,al1中存放的是交集。
- //如果al2和al1没有交集,那么al1为空
- sop(al1);
- }
- public static void method_base()
- {
- //创建一个集合容器,使用Collection接口的子类。ArrayList
- ArrayList al = new ArrayList();//创建一个对象
- //1、添加元素。
- al.add(“one”);//al对象调用add方法
- al.add(“two”);//add(Object obj);因为容器里添加的是任意类型的内容,所以用Object接收。——多态
- al.add(“three”);
- al.add(“three”);
- al.add(“four”);
- al.add(“hello”);
- sop(“原列表内容:”+al);
- al.add(2,”world”);//在2角标位上加入“world”元素
- sop(“加入了元素后:”+al);
- al.remove(1);//移除(删除)1角标位上的元素。
- sop(“移除了1角标位后:”+al);
- al.remove(“three”);//移除(删除)列表中第一次出现的“three”
- //al.removeRange(1,2);//removeRange(int fromIndex, int toIndex)移除列表中索引在formIndex(包括)和toIndex(不包括)之间的所有元素。(包含头部包含尾)
- sop(al.contains(“world”));//判断集合是否包含world
- sop(“大小=”+al.size());//打印容器大小。
- al.clear();//清空所有元素
- sop(al.isEmpty());//判断集合是否为空。
- sop(al);//打印容器内容。
- }
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- }
add(Object obj);因为容器里添加的是任意类型的内容,所以用Object接收。——多态
迭代器Iterator
迭代器:集合取出元素的方式。
[java] view plaincopy- Iterator it = al.iterator();
- while(it.hasNext())
- {
- System.out.println(it.next());
- }
每个容器都有存和取的方式,而且因为每个容器的数据结构不一样,
存取的方式也不同,具体实现方法不一样,顶层是connection接口。
因此每个集合都具备一个取出的方式。取出需要被描述。
在集合内部操作最方便,所以就定义了一个内部类,取出方式就可
以直接访问这些元素。在取出操作前,先要进行判断(判断是否有元素)。
List集合共性方法
Collection
|—List:元素是有序的。元素可以重复,因为该集合体系有索引。
|—–ArrayList:底层的数据结构使用的是数组结构。特点在于查询速度很快。但是增删稍慢(元素特别多的情况下)线程不同步(一般使用ArrayList,效率高)加锁完成同步
ArrayList初始容量为10,当超过10时,就new一个新的数组,长度为50%延长。
|—–LinkedList:底层使用的是链表数据结构。查询很慢(一次往下问),插入、删除元素很快
如图:
|—-Vector:底层是数组数据结构。线程同步(增删查都很慢)被ArrayList替代了
Vector长度也为10,
|—Set:元素是无序的,元素不可以重复。
List:
特有方法>>>凡是可以操作角标的方法都是该体系特有的方法。
特性(共性未写):
增
add(index, element);
addAll(index, Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();
ListIterator
并发访问:
不能对同一种元素进行多种同时操作。
可能会引发并发修改异常。
List集合特有的迭代器——ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作结合中的元素。
会发生ConcurrentModificationException异常,因此在迭代器时,
只能用迭代器的方法操作元素。
但是Iterator方法是有局限的——只能对元素进行判断、取出、移除的
操作。
如果想要其他的操作,如添加修改等,就需要使用其子接口
ListIterator,该接口只能通过List集合的LIstIterator方法获取。
Vector中的枚举
枚举就是Vector特有的取出方式,它和迭代器很像,(其实
枚举和迭代器时一样的),为什么出现迭代:枚举的名称以
方法名都过长,于是被迭代器取代了。
LinkedList
LinkedList。List接口的连接列表实现
LinkedList的特点:
========xxxFirst、xxxLast======
addFirst():
addLast();
getFrist();
getLast();
removeFirst();
removeLast();