java的List类

本文深入讲解Java集合框架的核心概念,包括List和Set等接口的区别,以及ArrayList、LinkedList、HashSet和TreeSet等具体实现的特点。同时介绍了List接口下特有的操作方法及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 集合的体系:
 
------------| Collection 单例集合的根接口
----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 
-------------------| ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
-------------------| Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。


----------------| Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
-------------------| HashSet  底层是使用了哈希表来支持的,特点: 存取速度快. 
-------------------| TreeSet   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。


有序: 集合的有序不是指自然顺序,而是指添加进去的顺序与元素出来的顺序是一致的。


List接口中特有方法:

添加
add(int index, E element) 
addAll(int index, Collection<? extends E> c) 


import java.util.ArrayList;
import java.util.List;		
public class Demo1 {

	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		list.add("赵六");
		list.add("赵六");
		System.out.println("集合的元素:"+ list);
		
		
	}
	
}


运行结果:
集合的元素:[张三, 李四, 王五, 赵六, 赵六]


获取:
get(int index) 
indexOf(Object o) 
lastIndexOf(Object o) 
subList(int fromIndex, int toIndex) 
修改:
set(int index, E element) 



List接口中特有的方法具备的特点: 操作的方法都存在索引值。


只有List接口下面的集合类才具备索引值。其他接口下面的集合类都没有索引值。

		
import java.util.ArrayList;
import java.util.List;		
public class Demo2 {
	
	public static void main(String[] args) {
		List list=  new ArrayList();
		list.add("狗娃");
		list.add("狗剩");
		list.add("铁蛋");  //把元素添加到集合的末尾处。
		list.add("狗娃");
		
		/*	
	       //添加方法
		list.add(1, "赵本山"); // 把元素添加到集合中的指定索引值位置上。
		List list2 = new ArrayList();
		list2.add("本山");
		list2.add("小沈阳");
		list.addAll(2,list2); //把list2的元素添加到list集合指定索引值的位置上。
		 */
		
		/*
//		获取的方法 
		System.out.println("get方法获取元素:"+list.get(1)); //根据索引值获取集合中的元素
		使用get方法遍历集合的元素:
		for (int i = 0; i < list.size() ; i++) {
			System.out.print(list.get(i)+",");
		}
		
		System.out.println("找出指定元素第一次出现在集合中 的索引值:"+ list.indexOf("本山"));
		System.out.println("找指定的元素最后一次出现在集合中的索引值:"+list.lastIndexOf("狗娃"));
		List subList = list.subList(1, 3); //指定开始与结束的索引值截取集合中的元素。
		System.out.println("子集合的元素是:"+ subList);
	 */	
		list.set(3, "赵本山"); //使用指定的元素替换指定索引值位置的元素。
		
		
		System.out.println("集合的元素:"+list);
		
		
		
		
	}

}	


运行结果:
集合的元素:[狗娃, 狗剩, 铁蛋, 赵本山]



迭代
listIterator() 



ListIterator特有的方法:

添加:
hasPrevious()  判断是否存在上一个元素。
previous()    当前指针先向上移动一个单位,然后再取出当前指针指向的元素。

next();  先取出当前指针指向的元素,然后指针向下移动一个单位。

---------------------------

add(E e)   把当前有元素插入到当前指针指向的位置上。
set(E e)   替换迭代器最后一次返回的元素。

		
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;	
public class Demo3 {
	
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("狗娃");
		list.add("狗剩");
		list.add("铁蛋");
		list.add("美美");
		
		ListIterator it = list.listIterator(); //返回的是一个List接口中特有的迭代器
//		System.out.println("有上一个元素吗?"+ it.hasPrevious());
//		System.out.println("获取上一个元素:"+it.previous());
//		it.next();
//		System.out.println("获取上一个元素:"+ it.previous());
		/*
		
		while(it.hasNext()){
			it.next();
		}
		
		while(it.hasPrevious()){
			System.out.println("元素:"+ it.previous());
		}
		
		
		it.next();
		it.next();
		it.add("张三");
		*/
		it.next();
		it.next();
		it.set("张三");
		
		
		System.out.println("集合的元素:"+ list);
		
		
	}

}	


运行结果:
集合的元素:[狗娃, 张三, 铁蛋, 美美]



练习: 使用三种方式遍历集合的元素.
第一种: 使用get方法遍历。
第二种: 使用迭代器正序遍历。
第三种: 使用迭代器逆序遍历。

		
import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;
public class Demo4 {
	
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		
		System.out.println("======get方法遍历=======");
		for(int i = 0 ; i<list.size() ; i++){
			System.out.print(list.get(i)+",");
		}
		
		System.out.println("\r\n======使用迭代器正序遍历==========");
		ListIterator it = list.listIterator();	//获取到迭代器
		while(it.hasNext()){
			System.out.print(it.next()+",");
		}
		
		System.out.println("\r\n======使用迭代器逆序遍历==========");
		while(it.hasPrevious()){
			System.out.print(it.previous()+",");
		}
		
		
	}

}

运行结果:
======get方法遍历=======
张三,李四,王五,
======使用迭代器正序遍历==========
张三,李四,王五,
======使用迭代器逆序遍历==========
王五,李四,张三,


 迭代器在变量元素的时候要注意事项: 在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素 个数,如果需要添加或者删除只能使用迭代器的方法进行操作。
 
 如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。
 
 迭代元素 的过程中: 迭代器创建到使用结束的时间。


 import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;		
public class Demo5 {
	 
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		
		ListIterator it = list.listIterator();	//获取到迭代器
	/*	while(it.hasNext()){
			System.out.print(it.next()+",");
			//it.add("aa"); // 把元素添加到当前指针指向位置
			list.add("aa");  // add方法是把元素添加到集合的末尾处的。
//			list.remove("张三");
		}*/
		it.next();		
		list.add("aa");

		
		
		
		System.out.println("\r\n集合的元素:"+ list);
	}

}			
	


运行结果:
集合的元素:[张三, 李四, 王五, aa]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值