Java类集学习(二)List接口

List接口及其常用子类

List中可以保存各个重复的内容。接口定义:public  interface List<E> extends Collection<E>

List继承Collection接口并大量扩充了Collection接口,拥有了更多的方法定义。

下面介绍List常用的子类:

1、ArrayList

定义: public class ArrayList<E> extends AbstractList<E> implements List<E>, 

          public class AbstractList<E> extends AbstractCollection<E> implements List<E>

(1)向集合中添加元素:

add():向list集合中添加元素;

add(int index,E element):向集合指定位置添加元素;

addAll(int index,Collection<?> c):向集合指定位置添加一组对象

例子:

public class ArrayListDemo01 {
    public static void main(String[] args){
        List<Object> list = new ArrayList<Object>();
        List<String> list1 = new ArrayList<String>();

        list.add("Hello World");
        System.out.println(list);
        list.add(0, 123);
        System.out.println(list);

        list1.add("456");
        list1.add("789");
        list.addAll(list1);
        System.out.println(list);

        System.out.println(list.size());
    }
}
输出结果为:

[Hello World]
[123, Hello World]
[123, Hello World, 456, 789]
4

(2)、删除集合中的元素:

add()方法一次只添加一个元素,多个元素添加会多次调用add(),每个元素之间用","隔开存储,一个元素之内可以有","(在于定义的LIst类型);

remove(int index):删除某个位置的元素;

remove(E element):删除某个元素;

removeAll(Collection<?> c):删除一组对象

例:

public class ArrayListDemo02 {
    public static void main(String[] args){
        List<String> list = new ArrayList<String>();
        list.add("123,Hello World");
        System.out.println(list);
        System.out.println(list.size());
//        list.remove(1);  错误,此list总共只有一个长度,存储位置为0
//        list.remove("123"); 错误,"123,Hello World"为一个元素,不能删除某一元素的一部分
        list.add(0,"456");
        list.remove(1);
        System.out.println(list);
        System.out.println(list.size());
        list.remove("456");
        System.out.println(list);
        System.out.println(list.size());
    }
}
输出结果为:

[123,Hello World]
1
[456]
1
[]
0

(3)集合的其他相关操作:

List中还存在截取集合、查找元素位置、判断元素是否存在、判断集合是否为空

public class ArrayListDemo03 {
	 public static void main(String[] args){
	        List<String> list = new ArrayList<String>();
	        System.out.println("集合是否为空?" + list.isEmpty());
	        list.add("Hello");
	        list.add("World");
	        list.add(0, "123");
	        System.out.println(list.contains("Hello") ? "\"Hello\"字符串存在!" : "\"Hello\"字符串不存在!");
	        List<String> subList = list.subList(1,2);//截取集合
	        System.out.println("集合截取:"+subList);
	        System.out.println("123字符的位置:"+list.indexOf("123"));
	    }
}
输出结果为:

集合是否为空?true
"Hello"字符串存在!
集合截取:[Hello]
123字符的位置:0
(4)集合的输出:

我们将在后续文章中讲解

2、Vector

List接口中还有一个子类:Vector,他是一个挽救的子类,

定义:public class Vector<E> extends AbstractList<E> implements List<E>

List<String> list = new Vector<String>();

list.add();

Vector<String> list1 = new Vector<String>();

list1.addElement();

使用上和ArrayList没有太大的区别。

ArrayList与Vector的比较:

对比       推出时间       性能     线程安全  
ArrayList 新,JDK1.2后 异步处理,
高性能
非线程安全
Vector 旧,JDK1.0时 同步处理,
低性能
线程安全
从实际应用来开,ArrayList使用的比较多。

3、LinkedList子类与Queue接口

LinkedList表示的是一个链表的操作类,此类实现了List同时也实现了Queue接口,先进先出。

(1)在链表的开头和结尾增加数据,为了达到链表的目的,必须使用LinkedList类

public class LinkedListDemo01 {

	/**
	 * LinkedList类,对链表增加数据
	 */
	public static void main(String[] args) {
	LinkedList<String> link = new LinkedList<String>();
        link.add("A");
        link.add("B");
        link.add("C");
        System.out.println("初始化链表:"+link);
        link.addFirst("X");//在链表头增加内容
        link.addLast("Y");//在链表尾部增加内容
        System.out.println("增加头尾之后的链表:"+link);
	}
}
输出结果:

初始化链表:[A, B, C]
增加头尾之后的链表:[X, A, B, C, Y]

(2)找到链表的头

public class LinkedListDemo02 {

	/**
	 * 找到标头的方式
	 */
	public static void main(String[] args) {
		LinkedList<String> link = new LinkedList<String>();
		link.add("A");
		link.add("B");
		link.add("C");
		System.out.println("创建的链表"+link);
		System.out.println("1.element方法找到表头:"+link.element());
		System.out.println("找完之后的链表:"+link);
		System.out.println("2.peek方法找到表头:"+link.peek());
		System.out.println("找完之后的链表:"+link);
		System.out.println("3.poll方法找到表头:"+link.poll());
		System.out.println("找完之后的链表:"+link);
	}
}

输出结果:

创建的链表[A, B, C]
1.element方法找到表头:A
找完之后的链表:[A, B, C]
2.peek方法找到表头:A
找完之后的链表:[A, B, C]
3.poll方法找到表头:A
找完之后的链表:[B, C]

(3)先进先出的方式取出全部数据

public class LinkedListDemo03 {

	/**
	 * 以先进先出的方式取出全部数据
	 */
	public static void main(String[] args) {
		LinkedList<String> link = new LinkedList<String>();
		link.add("A");
		link.add("B");
		link.add("C");
		System.out.println(link);
		System.out.println("以FIFO方式输出:");
		for(int i=0;i<link.size()+2;i++){
			System.out.print(link.poll()+"、");
		}
	}
}

输出结果:

[A, B, C]
以FIFO方式输出:
A、B、C、
在List 接口中实际开发用的较多的是ArrayList类。

下文讲解类集中Set接口的使用。






发布了36 篇原创文章 · 获赞 4 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章