集合是什么?我估计大家都会想到数组,数组不就是一个容器,并且是在堆内存中开辟的一系列连续地址的存储空间。切记数组中所存储的元素都是同一类型,目的就是为了统一管理。有的人还会说,集合不就是数学中我们所学到的集合吗?不就是为了存放东西,方便统一管理吗?对的没错。但是我今天带大家了解的集合非同小可,人称万金油。听这个名字都比较霸气,更何况它所能实现的东西,更是非同凡响。小编接下来就大家来看看今天所要给大家介绍的集合。
那今天所介绍的集合到底是什么?
集合是一个存放对象的引用的容器。
那么集合与数组的区别是什么?
- 数组和集合都是Java中的容器
- 数组的长度是固定的,集合的长度是可变的
- 数组只能存储相同数据类型的数据,这里的数据类型可以是基本数据类型,还可以是引用数据类型
- 集合可以存储不同数据类型的对象的引用(但一般情况下,我们会使用泛型来约定只使用一种数据类型),但是不能存储基本数据类型
但是在Java中每一种基本数据类型都有与其对应的包装类:
- byte——Byte
- short——Short
- int——Integer
- long——Long
- float——Float
- double——Double
- char——Character
- boolean——Boolean
集合的分类:List集合、Set集合、Map集合
如下图所示集合的继承关系:
1、List集合
List 接口实现了 Collection 接口,它主要有两个实现类:ArrayList 类和 LinkedList 类。在 List 集合中允许出现重复元素。与 Set 集合不同的是,在 List 集合中的元素是有序的,可以根据索引位置来检索 List 集合中的元素,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。
ArrayList 类 ——该类提供了快速的基于索引的成员访问方式,对尾部成员的增加和删除支持较好。使用 ArrayList 创建的集合,允许对集合中的元素进行快速的随机访问,不过,向 ArrayList 中插入与删除元素的速度相对较慢。
接下来就用代码简单的介绍一下ArrayList 类中的方法:
public class newArrayList<E> {
private ArrayList<E> al=new ArrayList<E>();
public static void main(String[] args) {
/**
* 创建了一个ArrayList集合——有序,可以利用角标来访问该集合中的元素
*/
ArrayList<Integer> al=new ArrayList<Integer>();
for(int i=1;i<=10;i++){
/**
* add函数是添加一个元素
* 并且返回值是一个boolean类型
* 如果添加成功,返回true,否则为false
*/
al.add(i);
}
/**
* 上面的元素添加成功
*/
System.out.println(al);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
/**
* 当add函数有两个参数时,表示的是:第一个参数为指定的角标,第一个参数为是在指定角标出添加的元素
*/
al.add(0, 0);
System.out.println(al);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
/**
* size函数是指该集合中的有效元素的个数
* 返回值为int
*/
System.out.println(al.size());
ArrayList<Integer> c=new ArrayList<Integer>();
for(int i=-3;i<=-1;i++){
c.add(i);
}
/**
* addAll该函数有两个参数,表示的是在指定的角标出添加另一个集合对象中大的元素
* 返回值是一个Boolean类型
*/
al.addAll(0, c);
System.out.println(al);
/**
* get函数是利用下标索引访问集合中的元素
* 返回值是一个泛型,在创建ArrayList集合时所指定
*/
System.out.println(al.get(13));
/**
* subList该函数返回的是一个集合,相当于就是在原来集合中所截取一定个数的元素,当做返回值
*/
System.out.println(al.subList(0, 4));
System.out.println(al);
/**
* clear函数是将该集合中的元素清空
*/
al.clear();
/**
* isEmpty函数是判断该集合中元素是否为空
* 返回值为boolean型
*/
System.out.println(al.isEmpty());
}
}
LinkedList 类——LinkedList 类采用链表结构保存对象,这种结构的优点是便于向集合中插入或者删除元素。需要频繁向集合中插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高,但是 LinkedList 类随机访问元素的速度则相对较慢。这里的随机访问是指检索集合中特定索引位置的元素。
接下来就用代码简单的介绍一下LinkedList类中的方法:
public class newLinkedList {
/**
* 先是创建一个LinkedList集合——该集合也是有序的
* 也可以通过角标访问其元素
*/
private static LinkedList<Integer> l = new LinkedList<Integer>();
public static void main(String[] args) {
/*
* 1、先是当做列表来看
*/
/**
* add函数是给列表添加元素
*/
for(int i=1;i<=10;i++){
l.add(i);
}
System.out.println(l);
/**
* add函数有两个参数,表示的是在指定角标出添加元素
* 无返回值
*/
l.add(0, 0);
System.out.println(l);
/**
* 在该列表的头添加一个元素
*/
l.addFirst(-1);
System.out.println(l);
/**
* 在列表的尾处添加一个元素
*/
l.addLast(11);
System.out.println(l);
/**
* 在列表的头和尾各删除一个元素
*/
l.removeFirst();
l.removeFirst();
l.removeLast();
l.removeLast();
System.out.println(l);
/**
* 打印该集合的有效元素的个数
*/
System.out.println(l.size());
/*
* 2、该集合当做队列时
* 因为队列要遵循先进先出
* 所以当作队列时只能在对尾添加元素
* 在对头删除元素
*/
l.clear();
System.out.println(l.isEmpty());
for(int i=1;i<=10;i++){
l.offer(i);//队尾
}
System.out.println(l);
/**
* 出队列
*/
for(int i=1;i<=5;i++){
l.poll();
}
System.out.println(l);
/**
* 访问对头元素
*/
System.out.println(l.peekFirst());
/*
* 3、当该集合当作栈时
* 因为栈是先进后出
* 因此栈只能从头入栈,从头弹栈
*/
l.clear();
System.out.println(l.isEmpty());
for (int i = 1; i <= 10; i++) {
/**
* 入栈
*/
l.push(i);
}
System.out.println(l);
/**
* 弹栈
*/
for(int i=1;i<=5;i++){
l.pop();
}
System.out.println(l);
/**
* 访问栈顶元素
*/
System.out.println(l.peek());
}
}
未完待续··········