如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。
-------Java编程思想
为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,
所以为了方便对多个对象的操作,就对对象进行存储,
集合就是存储对象最常用的一种方式
数组和集合都是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的,集合长度是可变的,
数组中可以存储基本数据类型,但集合只能存储对象
集合类的特点
集合只用于存储对象,集合的长度是可变的,集合可以存储 不同类型的对象
Java集合类关系图
常用的集合容器
Collection
|---List:元素是有序的,元素可以重复。因为该集合体系有索引。
|---ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|---LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|---Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|---Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
|---HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
|---TreeSet:底层数据结构是二叉树。可以对Set集合中的元素进行排序。
一些常用方法,以ArrayList为例
<pre name="code" class="java">/*
* 1.add方法的参数类型是Object。以便于接收任意类型对象。
* 2.集合中存储的都是对象的引用(地址)
*/
import java.util.ArrayList;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args){
method_1();
method_2();
}
public static void method_1() {
//创建一个集合容器,使用Collection接口的子类。ArrayList
ArrayList a1 = new ArrayList();
//添加元素
a1.add("java01");
a1.add("java02");
a1.add("java03");
a1.add("java04");
System.out.println("size:" + a1.size()) ; //获取集合长度
System.out.println("元原集合:" + a1); //打印集合
System.out.println("java03是否存在:" + a1.contains("java03")); //判断元素是否存在
System.out.println("集合是否为空:" + a1.isEmpty()); //判断集合是否为空
a1.remove("java02"); //删除元素
System.out.println("删除后集合:" + a1); //打印改变后的集合
a1.clear(); //清空集合
System.out.println("清空后集合:" + a1);
System.out.println();
}
public static void method_2() {
ArrayList a1 = new ArrayList();
a1.add("java01");
a1.add("java02");
a1.add("java03");
a1.add("java04");
ArrayList a2 = new ArrayList();
a2.add("java02");
a2.add("java04");
a2.add("java05");
a2.add("java06");
//a1.retainAll(a2); //取交集,al1中只会保留和a2中相同的元素
a1.removeAll(a2); //和retainAll相反,移除和a2中相同的元素
System.out.println("a1:" + a1);
System.out.println("a2:" + a2);
System.out.println();
}
}
/*输出:
size:4
元原集合:[java01, java02, java03, java04]
java03是否存在:true
集合是否为空:false
删除后集合:[java01, java03, java04]
清空后集合:[]
a1:[java01, java03]
a2:[java02, java04, java05, java06]
*/
LinkedList一些特有方法
import java.util.LinkedList;
/*
LinkedList:特有方法:
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
*/
class LinkedListDemo
{
public static void main(String[] args)
{
LinkedList link = new LinkedList();
link.addLast("java01");
link.addLast("java02");
link.addLast("java03");
link.addLast("java04");
System.out.println(link); //[java01, java02, java03, java04]
System.out.println(link.getFirst()); //java01
System.out.println(link.getFirst()); //java01
System.out.println(link.getLast()); //java04
System.out.println(link.removeFirst()); //java01
System.out.println(link.removeFirst()); //java02
System.out.println("size="+link.size());//size=2
}
}