集合是一种容器。
集合和数组的不同之处:只用于存储对象,集合长度可变,数组只能存同一种类型的对象,集合可以存任意对象。
Collection
|--List:元素是有序的,元素可以重复,因为该集合提醒有索引
|--ArrayList:底层的数据结构使用的是数组,查询速度很快,增删稍慢。是不同步的,容易出安全隐患。单线程用,效率高。
|--LinkedList:底层数据结构使用的是链表数据结构,查询速度慢,增删快
|--Vetor:底层是数组数据结构。victor是同步的,进步不用了
|--Set:元素无需,不可重复,无索引
|--HashSet :底层数据结构是哈希表。
|--TreeSet
Collection
collection是一个接口
其中包含ArrayList 和 LinkedList 和 Vector 三个主要的类
集合中存储的是对象的引用。
主要方法介绍:以ArrayList为例
import java.util.*;
public class Test {
public static void main(String adgs[])
{
ArrayList al = new ArrayList();
ArrayList al2 = new ArrayList();
al2.add("ppp");
al2.add("kkk");
//1,,添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
//2,获取长度
sop("size:"+al.size());
//3,打印集合
sop(al);
//4,删除元素
al.remove("java2"); //使用该对象的equals来判断是否相同
sop(al);
//5,清空集合
al.clear();
sop(al);
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
//6,判断元素
sop("java1是否存在"+al.contains("java1")); //equals
//7,添加集合 addall
al.addAll(al2);
sop(al);
//8,取交集,存放在al中
al.clear();
al2.clear();
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
al2.add("ppp");
al2.add("kkk");
al2.add("java3");
al2.add("java4");
al.retainAll(al2);
sop(al);
//9,取差集 al/al2
al.removeAll(al2);
//10,containsAll() 返回 true or false
}
public static void sop(Object o)
{
System.out.println(o);
}
}
迭代器类:Interator
取出并操作元素:
统一了集合元素的取出方式。
使用过程:
获取对象
Interator it = collection.iterator();
方法 Object it.next()//取出元素
boolean it.hasNext()//判断是否还有元素可以取出
import java.util.*;
public class Test {
public static void main(String adgs[])
{
ArrayList al = new ArrayList();
//1,,添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
/*
Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素
while(it.hasNext())
sop(it.next());
*/
for(Iterator it = al.iterator();it.hasNext();) //这种写法节省内存
sop(it.next());
}
public static void sop(Object o)
{
System.out.println(o);
}
}
List
List特有的常见方法:
凡是可以操作角标的方法都是
增
add(index,element)
addAll(index,Collection)
删
remove(index)
改
set(index,element)//ele:元素
查
get(index)
subList(from,to)
listIterator()
ArrayList
import java.util.*;
public class Test {
public static void main(String adgs[])
{
ArrayList al = new ArrayList();
//添加元素
al.add("java01");
al.add("java02");
al.add("java03");
sop("元集合"+al);
al.add(1,"java09");
sop(al);
//删除指定位置元素
al.remove(2);
sop(al);
//修改元素
al.set(1, "jjj");
sop(al);
//查
sop("1:"+al.get(1));
//获取所有元素。
for(int x=0;x<al.size();x++)
sop("al()"+al.get(x));
//通过 indexOF获取对象的位置
sop(al.indexOf("java03"));
List sub = al.subList(1, 3);
sop(sub);
}
public static void sop(Object o)
{
System.out.println(o);
}
}
列表迭代器
import java.util.*;
public class Test {
public static void main(String adgs[])
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
Iterator it = al.iterator();
while(it.hasNext())
{
Object obj = it.next();
if(obj.equals("java02"))
it.remove(); //讲java02从集合中删除了。但不支持al.add()操作
//会引发异常
sop(obj);
}
sop(al);
}
public static void sop(Object o)
{
System.out.println(o);
}
}
所以就有了列表迭代器:
LinkedList
特有方法:
addFirst(obj);//在LL的最开头添加obj
addLast(obj);
getFirst(); //获取头,尾
getLast();
removeFirst();//获取元素,但是元素会被删除。如果没有元素,会出现异常。
removeLast();
ArrayList 练习
删除重复对象,核心在于重写该对象的equals方法
注意类型转换多态的应用。
Set
Set接口:元素无须,不可重复。
Set的功能是和Collection是一致的
建立对象时建立 HashSet