JAVA List、ArrayList、LinkedList、泛型 JAVA第十三天(一)

List

 有序的Collection,也叫序列、列表。
  定义:此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引访问元素,并搜索到列表中的元素。

 常用方法(存储)

boolean 			add(E e) 
将指定的元素追加到此列表的末尾(可选操作)。 
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			boolean b = list.add("元素"+i);
			System.out.print(b+" ");
		}
		list.add("此元素被添加成功!");
		System.out.println(list);
输出结果:
true true true true true [元素0, 元素1, 元素2, 元素3, 元素4, 此元素被添加成功!]
---------------------------------------------------------------------------------
void 				add(int index, E element) 
将指定的元素插入此列表中的指定位置(可选操作)。  
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("元素"+i);
		}
		list.add(2,"此元素被添加成功!");
		System.out.println(list);
输出结果:
[元素0, 元素1, 此元素被添加成功!, 元素2, 元素3, 元素4]
---------------------------------------------------------------------------------
boolean 			addAll(Collection<? extends E> c) 
按指定集合的迭代器(可选操作)返回的顺序将指定集合中的所有元素附加到此列表的末尾。  
例:
		Collection collection = new ArrayList();
		for(int i = 0;i<5;i++) {
			collection.add("集合元素"+i);
		}
		
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		boolean b = list.addAll(collection);
		System.out.println(b);		
		System.out.println(list);
输出结果:
true
[列表元素0, 列表元素1, 列表元素2, 列表元素3, 列表元素4, 集合元素0, 集合元素1, 
集合元素2, 集合元素3, 集合元素4]
---------------------------------------------------------------------------------
boolean 			addAll(int index, Collection<? extends E> c) 
将指定集合中的所有元素插入到此列表中的指定位置(可选操作)。 
例:
		Collection collection = new ArrayList();
		for(int i = 0;i<5;i++) {
			collection.add("集合元素"+i);
		}
		
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		boolean b = list.addAll(2,collection);
		System.out.println(b);
		System.out.println(list);
		
	}
输出结果:
true
[列表元素0, 列表元素1, 集合元素0, 集合元素1, 集合元素2, 集合元素3, 集合元素4,
 列表元素2, 列表元素3, 列表元素4]
---------------------------------------------------------------------------------

 常用方法(获取)

E 				get(int index) 
返回此列表中指定位置的元素。  
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		String str = (String)list.get(4);
		System.out.println(str);
输出结果:
列表元素4
---------------------------------------------------------------------------------
int 			size() 
返回此列表中的元素数。  
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		System.out.println("此列表中的元素个数为:"+list.size());
		System.out.println(list);
输出结果:
此列表中的元素个数为:5
[列表元素0, 列表元素1, 列表元素2, 列表元素3, 列表元素4]
---------------------------------------------------------------------------------

 常用方法(遍历)

获取方法+for循环
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		for(int i = 0;i<list.size();i++) {
			//当已知目标类型时,使用强转
			//String str = (String)list.get(i);
			//System.out.print(str+" ");
			
			//当未知目标类型时,使用Object接收
			Object obj = list.get(i);
			System.out.print(obj+" ");
		}
输出结果:
列表元素0 列表元素1 列表元素2 列表元素3 列表元素4 
---------------------------------------------------------------------------------
ListIterator<E> 		listIterator() 
返回列表中的列表迭代器(按适当的顺序)。  
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		ListIterator liter = list.listIterator();
		while(liter.hasNext()) {
			String str =(String)liter.next();
			System.out.print(str+" ");
		}
输出结果:
列表元素4 测试插入 列表元素3 测试插入 列表元素2 测试插入 列表元素1 测试插入 列表元素0
---------------------------------------------------------------------------------
void 					add(E e) 
将指定的元素插入列表(可选操作)。 (利用游标添加时,是先添加再去访问元素)
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		ListIterator liter = list.listIterator();
		//liter.add("测试插入");
//此处的打印结果为[测试插入, 列表元素0, 列表元素1, 列表元素2, 列表元素3, 列表元素4]
		while(liter.hasNext()) {
			liter.add("测试插入");
			String str =(String)liter.next();
			System.out.print(str+" ");
		}
		System.out.println();
		System.out.println(list);
输出结果:
列表元素0 列表元素1 列表元素2 列表元素3 列表元素4 
[测试插入, 列表元素0, 测试插入, 列表元素1, 测试插入, 列表元素2, 测试插入, 列表元素3,
 测试插入, 列表元素4]
---------------------------------------------------------------------------------
boolean 			hasPrevious() 
返回 true如果遍历反向列表,列表迭代器有多个元素。  
E 					previous() 
返回列表中的上一个元素,并向后移动光标位置。  
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		ListIterator liter = list.listIterator();
		while(liter.hasNext()) {
			String str =(String)liter.next();
			System.out.print(str+" ");
		}
		System.out.println();
		while(liter.hasPrevious()) {
			String str =(String)liter.previous();
			System.out.print(str+" ");
		}
输出结果:
列表元素0 列表元素1 列表元素2 列表元素3 列表元素4 
列表元素4 列表元素3 列表元素2 列表元素1 列表元素0 
---------------------------------------------------------------------------------

 常用方法(删除)

E 					remove(int index) 
删除该列表中指定位置的元素(可选操作)。 
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		list.remove(2);
		System.out.println(list);
输出结果:
[列表元素0, 列表元素1, 列表元素3, 列表元素4]
---------------------------------------------------------------------------------
boolean 			remove(Object o) 
从列表中删除指定元素的第一个出现(如果存在)(可选操作)。  
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素"+i);
		}
		list.add("中间元素");
		list.add("列表元素4");
		System.out.println(list);
		list.remove("列表元素4");
		System.out.println(list);
输出结果:
[列表元素0, 列表元素1, 列表元素2, 列表元素3, 列表元素4, 中间元素, 列表元素4]
[列表元素0, 列表元素1, 列表元素2, 列表元素3, 中间元素, 列表元素4]
---------------------------------------------------------------------------------
boolean 			removeAll(Collection<?> c) 
从此列表中删除包含在指定集合中的所有元素(可选操作)。 
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素一"+i);
		}
		List list2 = new ArrayList();
		for(int i = 0;i<5;i++) {
			list2.add("列表元素二"+i);
		}
		list.addAll(list2);
		System.out.println(list);
		list.removeAll(list2);
		System.out.println(list);
输出结果:
[列表元素一0, 列表元素一1, 列表元素一2, 列表元素一3, 列表元素一4, 列表元素二0,
							 列表元素二1, 列表元素二2, 列表元素二3, 列表元素二4]
[列表元素一0, 列表元素一1, 列表元素一2, 列表元素一3, 列表元素一4]
---------------------------------------------------------------------------------
void 				clear() 
从此列表中删除所有元素(可选操作)。  
例:
		List list = new ArrayList();
		for(int i = 0;i<5;i++) {
			list.add("列表元素一"+i);
		}
		list.clear();
		System.out.println(list);
输出结果:
[]
---------------------------------------------------------------------------------

线程安全与不安全的解释

1、线程安全:
  指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。

2、线程不安全:
  是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

  举例说明:假设售票系统有1000张票,A和B同时来买票,如果是线程不安全,那么可能售票系统可能出现1000-1去同时执行的情况,最终结果是A和B都买完后剩下999张票,而不是998张。

ArrayList

  定义:可调整大小的数组,其实现了List接口。实现所有可选列表操作,并允许包括null在内的所有元素。
  除了实现List的接口之外,该类还提供了一些方法来操纵内部用来存储列表的数组的大小。
  特点:①ArrayList中的元素可以重复;②是有序的集合,长度不固定;③不是线程安全的;④效率高(多线程操作);

 由于ArrayList是List的实现类,所以其方法与List的方法一致,详见jdkAPI

LinkedList

  定义:List接口的链接列表的实现。实现所有可选的列表操作,并且允许包括null在内的所有元素。
  除了实现List接口外,LinkedList类还为在列表开头及结尾get、remove和insert元素提供了统一的命名方法。这些操作允许将链接列表用作堆、栈、队列或双端队列。
  特点:①LinkedList中的元素可以重复;②是有序的集合,长度不固定;③不是线程安全的;④效率高(多线程操作);

特有方法(简单列举,详见JdkAPI)

E 				element() 
检索但不删除此列表的头(第一个元素)。  
例:
		LinkedList linkedList = new LinkedList();
		for(int i = 0;i<4;i++) {
			linkedList.add("链表元素"+i);
		}
		Object obj = linkedList.element();
		System.out.println(obj);
	}
输出结果:
链表元素0
---------------------------------------------------------------------------------
E 				getFirst() 
返回此列表中的第一个元素。  
例:
		LinkedList linkedList = new LinkedList();
		for(int i = 0;i<4;i++) {
			linkedList.add("链表元素"+i);
		}
		Object obj = linkedList.getFirst();
		System.out.println(obj);
输出结果:
链表元素0
---------------------------------------------------------------------------------
E 				getLast() 
返回此列表中的最后一个元素。 
例:
		LinkedList linkedList = new LinkedList();
		for(int i = 0;i<4;i++) {
			linkedList.add("链表元素"+i);
		}
		Object obj = linkedList.getLast();
		System.out.println(obj);
输出结果:
链表元素3
---------------------------------------------------------------------------------
E 				peek() 
检索但不删除此列表的头(第一个元素)。  
例:
		LinkedList linkedList = new LinkedList();
		for(int i = 0;i<4;i++) {
			linkedList.add("链表元素"+i);
		}
		Object obj = linkedList.peek();
		System.out.println(obj);
输出结果:
链表元素0
---------------------------------------------------------------------------------
E 				poll() 
检索并删除此列表的头(第一个元素)。  
例:
		LinkedList linkedList = new LinkedList();
		for(int i = 0;i<4;i++) {
			linkedList.add("链表元素"+i);
		}
		Object obj = linkedList.poll();
		System.out.println(obj);
		System.out.println(linkedList);
输出结果:
链表元素0
[链表元素1, 链表元素2, 链表元素3]
---------------------------------------------------------------------------------
E 				set(int index, E element) 
用指定的元素替换此列表中指定位置的元素。  
例:
		LinkedList linkedList = new LinkedList();
		for(int i = 0;i<4;i++) {
			linkedList.add("链表元素"+i);
		}
		linkedList.set(1, "此元素已被替换");
		System.out.println(linkedList);
输出结果:
[链表元素0, 此元素已被替换, 链表元素2, 链表元素3]
---------------------------------------------------------------------------------
E 				pop() 
从此列表表示的堆栈中弹出一个元素。换句话说,删除并返回此列表的第一个元素。 
例:
		LinkedList linkedList = new LinkedList();
		for(int i = 0;i<4;i++) {
			linkedList.add("链表元素"+i);
		}
		Object obj = linkedList.pop();
		System.out.println(obj);
		System.out.println(linkedList);
输出结果:
链表元素0
[链表元素1, 链表元素2, 链表元素3]
---------------------------------------------------------------------------------
void 			push(E e) 
将元素推送到由此列表表示的堆栈上。换句话说,在该列表的前面插入元素。  
例:
		LinkedList linkedList = new LinkedList();
		for(int i = 0;i<4;i++) {
			linkedList.add("链表元素"+i);
		}
		linkedList.push("此元素的被插入");
		System.out.println(linkedList);
输出结果:
[此元素的被插入, 链表元素0, 链表元素1, 链表元素2, 链表元素3]
---------------------------------------------------------------------------------

泛型

  使用:通过泛型指定一种集合中存储数据的数据类型。
  作用:在对集合使用其方法对元素做操作时不用使用根类Object或指定数据类型进行强转,同样在使用迭代器时,元素的数据类型也会由泛型来指定。
例:定义一个元素类型为String的ArrayList
Collection<String> 集合名 = new ArrayList<String>();
<? extends E> 意思为要么为泛型本身,要么为泛型的子类。

 自定义泛型(T、W、E)

  这里的T、W、E是代表字母,在自定义泛型时可以按需自定义。(例如你创建了一个学生类,这个学生类的Student也可以是一种泛型)

public class 类名<T>{
	类体;
}

 ①所有泛型方法声明都有一个类型参数声明部分(<>),该类型声明部分在返回值类型之前
 ②每一个类型参数声明部分包含一个或多个类型参数,参数间用,隔开。一个泛型参数(类型变量),是用于指定一个泛型类型名称的标识符。
 ③类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
 ④泛型方法体的声明和一般方法一样。类型参数只能代表引用型类型,不能是原始类型(例:int、double等)。

  1.泛型类是创建其对象的时候指明泛型的具体类型。
  2.泛型方法是在调用方法的时候指明泛型的具体类型。
例:
 1.类名<引用类型> 对象名 = new 类名<引用类型>();
 2.访问限定修饰符<引用类型> 返回值类型 方法名(参数列表){方法体}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值