集合概述
集合是java中存储对象数据的一种容器。不支持基本类型数据的存储,只能存储引用类型的数据,如果要存储基本类型的数据可以选用包装类。集合大小不固定,启动后可以动态变化,类型也可以选择不固定。
集合分为单列(Collection)和双列(Map):
Collection体系
Collection是单列集合类型的父接口,它有两个子接口,一个List,一个Set。List接口有两个常用的实现类ArrayList和LinkedList。List集合的特点是有序、可重复、有索引,Set集合的特点是无序、不重复、无索引。
ArrayList集合在查询元素时速度很快,但在增加或者删除元素时效率较低。为了解决这一问题,可以使用删除或者增加元素效率更高的List的另一个实现类LinkedList。
简单的一些代码示例如下:
package collection;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
public class Demo1 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList(); // 实例化一个ArrayList集合
arrayList.add("张三"); // 向集合中添加一个元素
arrayList.add("李四");
arrayList.add("王五");
arrayList.add("赵六");
System.out.println("集合的长度为:"+arrayList.size());
System.out.println("集合的第二个元素为:"+arrayList.get(1));
}
@Test
public void test01(){
System.out.println("LinkedList的学习");
LinkedList linkedList = new LinkedList();
linkedList.add("张三");
linkedList.add("李四");
linkedList.add("王五");
linkedList.add("赵六");
linkedList.add("钱七");
System.out.println(linkedList);
linkedList.add(3, "第四个元素");
System.out.println(linkedList);
linkedList.addFirst("第一个元素");
System.out.println(linkedList);
System.out.println(linkedList.getFirst());
linkedList.remove(0);
linkedList.removeFirst();
System.out.println(linkedList);
}
@Test
public void test02(){
ArrayList list = new ArrayList();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
Iterator iterator = list.iterator();
// 注意:如果在使用迭代器进行遍历的过程中需要删除元素的话,应该使用迭代器自带的remove方法 即:迭代器变量名.remove(obj)
// 如果直接使用 集合.remove(obj) 来删除元素的话,会导致迭代器预期迭代次数与实际元素数不同,从而导致出错。
while (iterator.hasNext()){
Object o = iterator.next();
// 想把名为李四的删除掉
if (o.equals("李四")) {
iterator.remove();
}
System.out.println(o);
}
System.out.println(list);
}
@Test
public void test03(){
ArrayList<String> list = new ArrayList();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
// foreach 简化了可迭代对象的遍历操作,但也有局限性,即不可在遍历时对元素进行修改
for (String s : list){
System.out.println(s);
}
}
}
Set接口主要有两个实现类,分别是HashSet和TreeSet。其中,HashSet是根据对象的散列值来确定元素在集合中的存储位置,具有良好的存取和查找性能。TreeSet则是以二叉树的方式来存储元素,它可以实现对集合中的元素进行排序。
HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。