java集合框架——List
简介:集合框架:一组专门用来存储其他对象的类(对象容器类)和接口的设计结构,统称为集合框架。而这组类的功能就是实现各种方式的数据存储。
Collection接口:1、Set接口:存放的元素是无序并且不包含重复元素2、List接口:存放的元素是有序并且允许有重复元素
注: 这2种接口中的元素:即对象引用,元素类型都为Object
这2种接口中的重复:是指两个对象用过equals判断相等这2种接口中的有序:是指元素存入的顺序与取出的顺序相同
List接口三种实现类:
1、ArrayList类:
是对象引用的一个变长数组,能够动态的添加或减少其大小
注:对于使用索引取出元素有较高的效率,能够利用索引快速定位。但是对元素的删除和插入速度较慢,因为使用的数组,需要移动后面的元素以调整索引顺序
public class ListDemo {
public static void main(String[] args) {
Collection c1 = new ArrayList();// 实例化一个具体的子类对象
for (int i = 0; i < 5; i++) {
c1.add(new Integer(i));
}// 循环添加10个整型类对象
System.out.println("c1:" + c1);
Collection c2 = new ArrayList();
c2.addAll(c1);// 将集合c1添加到c2集合对象中的操作
c2.remove(new Integer(3));// 删除
c2.add("haha");// 添加
System.out.println("c2:" + c2);
Iterator it = c2.iterator();
while (it.hasNext()) {
Object obj = it.next();
System.out.println("Iterator遍历c2" + obj+"\t");
}
}
}
结果如图:
2、LinkedList类:
提供了一个链接列表数据结构,LinkedList容器类通过连接指针来关联前后两个元素
注:因为LinkedList是使用双向链表实现的容器,所以频繁的插入坏人删除元素,使用LinkedList类效率较高,适合实现栈和队列public final class LinkedListDemo {
public static void main(String[] args) {
LinkedList linklst = new LinkedList();
linklst.add("F");
linklst.add("B");
linklst.add("D");
linklst.add("E");
linklst.add("C");
System.out.println("显示初始化后linklst的内容:" + linklst);
linklst.addLast("Z");
linklst.addFirst("A0");
linklst.add(1, "A1");
System.err.println("显示添加操作后linklst的内容:" + linklst);
// 执行删除F元素操作
linklst.remove("F");
// 执行删除第二个元素
linklst.remove(2);
System.out.println("显示删除操作后linklst的内容:" + linklst);
// 执行删除第一个元素
linklst.removeFirst();
// 执行删除最后一个元素
linklst.removeLast();
System.out.println("显示删除操作后linklst的内容:" + linklst);
// 获取第二个元素
Object val = linklst.get(2);
// 修改内容
linklst.set(2, (String) val + "Changed");
System.out.println("显示修改操作后linklst的内容:" + linklst);
}
}
结果如图所示:
3、Vector类:
提供了实现可增长数组的功能。
注:Vector类的大多数操作和ArrayList类相同,区别在于Vector类是线程同步的。public class VectorDemo {
public static void main(String[] args) {
Vector v = new Vector();
v.add("one");
v.add("two");
v.add("three");
System.out.println("显示向量初始值" + v.toString());
v.insertElementAt("zero", 0);
v.insertElementAt("oop", 3);
System.out.println("显示插入元素后向量值" + v.toString());
v.setElementAt("three", 3);
v.setElementAt("four", 4);
System.out.println("显示修改元素后向量值" + v.toString());
v.removeAllElements();
System.out.println("显示删除元素后向量值" + v.toString());
}
}
结果如图:
注:java的集合与数组的区别在于:在创建java数组时,必须明确指定数组的长度,数组一旦创建,其长度就不能被改变。为了使程序能方便的存储、检索和操纵数目不固定
的一组数据,JDK类库提供了java集合,所以java集合类都位于java.util包中。另外java集合中不能存放基本类型数据,而只能存放对象的引用。