《疯狂Java讲义(第4版)》-----第8章【Java集合】(List)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccnuacmhdu/article/details/82933298

List

最常用的实现类应该是ArrayList,是基于数组实现的List类,封装了动态可再分配的Object[]数组。


import java.util.ArrayList;

public class Hello{

	public static void main(String[] args){
		ArrayList books = new ArrayList();
		books.add(new String("计算机网络"));
		books.add(new String("计算机组成原理"));
		books.add(new String("操作系统"));
		
		System.out.println(books);

		books.add(1, "疯狂Java讲义");
		for(int i = 0; i < books.size(); i++){
			System.out.println(books.get(i));
		}
		
		books.remove(2);
		System.out.println(books);
		System.out.println(books.indexOf(new String("操作系统")));
		books.set(0, "疯狂Java讲义");
		System.out.println(books);
		System.out.println(books.subList(0,2));
	}
}

在这里插入图片描述

List判断两个元素对象是否相等是根据equals来比较的


import java.util.ArrayList;

class A{
	public boolean equals(Object obj){
		return true;
	}
}

public class Hello{

	public static void main(String[] args){
		ArrayList books = new ArrayList();
		books.add(new String("计算机网络"));
		books.add(new String("计算机组成原理"));
		books.add(new String("操作系统"));
		
		System.out.println(books);
	
		books.remove(new A());//这将删除当前books第一个元素
		System.out.println(books);

		books.remove(new A());//这将删除当前books第一个元素
		System.out.println(books);
	}
}

在这里插入图片描述

给List的元素排序


import java.util.ArrayList;
import java.util.Comparator;

//为什么官方文档给出的Comparator有两个抽象方法,并且这里没有实现另一个抽象方法,也没出错???
class MyComparator implements Comparator{
	public int compare(Object obj1, Object obj2){
		String s1 = (String)obj1;
		String s2 = (String)obj2;
		return s1.length() - s2.length();
	}
}

public class Hello{

	public static void main(String[] args){
		ArrayList books = new ArrayList();
		books.add(new String("计算机网络"));
		books.add(new String("计算机组成原理"));
		books.add(new String("操作系统"));
		
		/*排序方法一-----匿名内部类
		books.sort(new Comparator(){
			public int compare(Object obj1, Object obj2){
				String s1 = (String)obj1;
				String s2 = (String)obj2;
				return s1.length() - s2.length();
			}
		});
		*/

		//排序方法二-----Lambda表达式
		//books.sort((obj1, obj2)->((String)obj1).length() - ((String)obj2).length());
		
		//排序方法三-----首先写一个实现Comparator的类MyComparator
		books.sort(new MyComparator());
	
		System.out.println(books);
	
	}
}

实现replaceAll方法,认识UnaryOperator函数式接口

下面会通过代码去实现这个下面的方法(用每个字符串的长度代替字符串本身):
在这里插入图片描述


import java.util.ArrayList;
import java.util.function.UnaryOperator;

//UnaryOperator是函数式接口,唯一方法:identity(),官方文档里来看,没有抽象方法啊!!
//去父接口Function找,唯一抽象方法apply,实现这个方法就OK了
//下面是用每个字符串的长度代替这个字符串
class MyUnaryOperator implements UnaryOperator{
	public Integer apply(Object obj){
		String s = (String)obj;
		return s.length();
	}
}

public class Hello{

	public static void main(String[] args){
		ArrayList books = new ArrayList();
		books.add(new String("计算机网络"));
		books.add(new String("计算机组成原理"));
		books.add(new String("操作系统"));
		
		//replaceAll-----方式一:本质的方法,写一个UnaryOperator的实现类
		//books.replaceAll(new MyUnaryOperator());
		
		//replaceAll-----方式二:Lambda表达式
		//books.replaceAll(obj->((String)obj).length());

		//replaceAll-----方式三:匿名内部类
		books.replaceAll(new UnaryOperator(){
			public Integer apply(Object obj){
				String s = (String)obj;
				return s.length();
			}
		});	
	
		System.out.println(books);//[5, 7, 4]
	
	}
}

listIterator方法

Set只提供了iterator方法,List还额外提供了listIterator方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,专门操作List。ListIterator接口在Iterator接口的基础上增加了hasPrevious
previous,add方法。ListIterator接口的官方文档如下:

在这里插入图片描述


import java.util.ArrayList;
import java.util.ListIterator;

public class Hello{

	public static void main(String[] args){
		ArrayList books = new ArrayList();
		books.add(new String("计算机网络"));
		books.add(new String("计算机组成原理"));
		books.add(new String("操作系统"));
			
		ListIterator lit = books.listIterator();
		while(lit.hasNext()){
			System.out.println(lit.next());
			//迭代遍历过程中,修改元素
			if(lit.nextIndex() == 1){
				
				lit.set("Java疯狂讲义");
				lit.add("我是第一个");
			}
			if(lit.nextIndex() == 4){
				lit.remove();
			}
			
			
		}
		System.out.println("-------------------------");
		while(lit.hasPrevious()){
			System.out.println(lit.previous());
		}

	}
}

在这里插入图片描述

Arrays.ArrayList

Arrays工具类里提供了asList(Object… a)方法,可以把一个数组或指定个数的对象转换成一个List集合,这个List集合是Arrays.ArrayList(一个固定长度的List集合)。只能遍历这个集合,不可增加、删除元素。


import java.util.List;
import java.util.Arrays;

public class Hello{

	public static void main(String[] args){
		List books = Arrays.asList("第一本书", "第二本书", "第三本书");
		System.out.println(books.getClass());
		//List继承Collection,Collection继承Iterator,Iterator里有forEach方法,
		//forEach方法的参数是Consumer,Consumer是一个函数式接口,唯一抽象方法:void accept(T t)
		books.forEach(obj->System.out.println(obj));
		System.out.println("---------------------------");
		
		//Lambda表达式支持方法引用和构造器引用,这里演示的方法引用,非常简洁!!!
		books.forEach(System.out :: println);
		
	}
}

上面的一句代码:books.forEach(System.out :: println);非常简洁,这是Lambda对方法引用的支持。

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/82933298