栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java高级编程07(集合框架之List集合)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java高级编程07(集合框架之List集合)

List集合

java.util.List接口,继承自Collection。
         List集合是可重复集,并且有序,提供了一套可以通过下标操作元素的方法。
常用实现类:
         java.util.ArrayList:内部使用数组实现,查询性能更好。
         java.util.linkedList:内部使用链表实现,首尾增删元素性能更好.
List集合常见方法
         1、get()与set()

package com.test.list;
import java.util.ArrayList;
import java.util.List;

public class ListDemo {
		public static void main(String[] args) {
		List list = new ArrayList<>();
		// List list = new linkedList<>();
		list.add("one");
		list.add("two");
		list.add("three");
		list.add("four");
		list.add("five");
		
		//获取第三个元素
		String e = list.get(2);
		System.out.println(e);
		for(int i=0;i 

         2、重载的add()和remove()

package com.test.list;
import java.util.ArrayList;
import java.util.List;

public class ListDemo2 {
	public static void main(String[] args) {
	List list = new ArrayList<>();
	list.add("one");
	list.add("two");
	list.add("three");
	list.add("four");
	list.add("five");
	System.out.println(list);
	
	//[one,two,six,three,four,five]
	list.add(2,"six");
	System.out.println(list);
	
	//[one,six,three,four,five]
	String e = list.remove(1);
	System.out.println(list);
	System.out.println("被删除的元素:"+e);
	}
}

         3、subList()方法

package com.test.list;
import java.util.ArrayList;
import java.util.List;

public class ListDemo3 {
	public static void main(String[] args) {
	List list = new ArrayList<>();
	for(int i=0;i<10;i++){
		list.add(i);
	}
	System.out.println(list);
	//获取3-7这部分
	List subList = list.subList(3,8);
	System.out.println(subList);
	//将子集每个元素扩大10倍
	for(int i=0;i 
集合与数组的转换 

1、集合转换为数组
Collection提供了一个方法:toArray,可以将当前集合转换为一个数组

package com.test.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CollectionToArrayDemo {
	public static void main(String[] args) {
		List list = new ArrayList<>();
		list.add("one");
		list.add("two");
		list.add("three");
		list.add("four");
		list.add("five");
		System.out.println(list);
		// Object[] array = list.toArray();
		
		String[] array = list.toArray(new String[list.size()]);
		System.out.println(array.length);
		System.out.println(Arrays.toString(array));
	}
}

2、数组转换为List集合
数组的工具类Arrays提供了一个静态方法asList(),可以将一个数组转换为一个List集合

package com.test.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayToListDemo {
	public static void main(String[] args) {
	String[] array = {"one","two","three","four","five"};
	System.out.println(Arrays.toString(array));
	List list = Arrays.asList(array);
	System.out.println(list);
	list.set(1,"six");
	System.out.println(list);
	//数组跟着改变了。注意:对数组转换的集合进行元素操作就是对原数组对应的操作
	System.out.println(Arrays.toString(array));
	
	// list.add("seven");
	
	// List list2 = new ArrayList<>();
	// list2.addAll(list);
	
	List list2 = new ArrayList<>(list);
	System.out.println("list2:"+list2);
	list2.add("seven");
	System.out.println("list2:"+list2);
	}
}

3、集合的排序
java.util.Collections类
Collections是集合的工具类,里面定义了很多静态方法用于操作集合.
Collections.sort(List list)方法,可以对List集合进行自然排序(从小到大)

package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class SortListDemo1 {
	public static void main(String[] args) {
	List list = new ArrayList<>();
	Random random = new Random();
	for(int i=0;i<10;i++){
		list.add(random.nextInt(100));
	}
	System.out.println(list);
	Collections.sort(list);
	System.out.println(list);
	}
}

4、排序自定义类型元素

package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SortListDemo2 {
	public static void main(String[] args) {
		List list = new ArrayList<>();
		list.add(new Point(3,5));
		list.add(new Point(7,9));
		list.add(new Point(1,1));
		list.add(new Point(8,3));
		list.add(new Point(2,6));
		System.out.println(list);
		
		Collections.sort(list);//编译不通过 compare比较 comparable可以比较的
		System.out.println(list);
	}
}

实际开发中,我们并不会让我们自己定义的类(如果该类作为集合元素使用)去实现Comparable接口,因为这对我们的程序有侵入性。侵入性:当我们调用某个API功能时,其要求我们为其修改其他额外的代码,这个现象就是侵入性。侵入性越强的API越不利于程序的后期可维护性,应当尽量避免。

5、重载的Collections.sort(List list,Comparator c)方法

package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortListDemo2 {
	public static void main(String[] args) {
		List list = new ArrayList<>();
		list.add(new Point(3,5));
		list.add(new Point(7,9));
		list.add(new Point(1,1));
		list.add(new Point(8,3));
		list.add(new Point(2,6));
		System.out.println(list);
		
		// Collections.sort(list);//编译不通过 compare比较 comparable可以比较的
		
		Comparator c = new Comparator() {
		
		public int compare(Point o1, Point o2) {
			int olen1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
			int olen2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
			return olen1-olen2;
		}
	};
	Collections.sort(list,c);
	System.out.println(list);
	}
}

最终没有侵入性的写法

package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortListDemo2 {
	public static void main(String[] args) {
		List list = new ArrayList<>();
		list.add(new Point(3,5));
		list.add(new Point(7,9));
		list.add(new Point(1,1));
		list.add(new Point(8,3));
		list.add(new Point(2,6));
		System.out.println(list);
		
		// Collections.sort(list);//编译不通过 compare比较 comparable可以比较的
		
		// Comparator c = new Comparator() {
		// 
		// public int compare(Point o1, Point o2) {
		// int olen1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
		// int olen2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
		// return olen1-olen2;
		// }
		// };
		// Collections.sort(list,c);
		Collections.sort(list,new Comparator() {
		public int compare(Point o1, Point o2) {
		int olen1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
		int olen2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
		return olen1-olen2;
		}
	});
	System.out.println(list);
	}
}

案例练习:
创建Student类,创建集合将Student对象加入集合,按学号对学生信息进行排序。

创建Student类

package com.scy.array;
public class Student{
		//属性
		public int  id;
		public String name;
		public String sex;
		public int  age;
	
		//getter  setter
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		//toString
		@Override
		public String toString() {
			return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
		}
		//有参
		public Student(int id, String name, String sex, int age) {
			super();
			this.id = id;
			this.name = name;
			this.sex = sex;
			this.age = age;
		}
		//无参
		public Student() {
			super();
		}
	}

Student类的学号排序:

package com.scy.homework;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class HomeWorkDemo4 {
	public static void main(String[] args) {

		//创建集合
		List list = new ArrayList<>();

		//创建Student对象
		Student stu1 = new Student(202001,"张三","男",12);
		Student stu2 = new Student(202005,"李四","女",45);
		Student stu3 = new Student(202003,"王五","男",18);
		Student stu4 = new Student(202004,"马六","男",22);
		Student stu5 = new Student(202002,"赵一","男",32);

		//将stu对象添加到集合中
		list.add(stu1);
		list.add(stu2);
		list.add(stu3);
		list.add(stu4);
		list.add(stu5);
		for (Student student : list) {
			System.out.println(student);
		}
		
		System.out.println("=============按学号排序后=============");
		
		
		Collections.sort(list,new Comparator() {

			@Override
			public int compare(Student stu, Student student) {
				//定义返回值 大小关系
				int i=0;
				//获取第一个对象的id
				int id1 = stu.getId();
				//获取第二个对象的id
				int id2 = student.getId();
				//第一个大于第二个
				if (id1>id2) {
					i=1;
				}else if(id1==id2){//第一个等于第二个
					i=0;
				}else if(id1 

排序字符串
java中提供的类,如:String,包装类都实现了Comparable接口,但有时候这些比较规则不能满足我们的排序需求时,同样可以临时提供一种比较规则来进行排序.

package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortListDemo3 {
	public static void main(String[] args) {
		List list = new ArrayList<>();
		// list.add("Tom");
		// list.add("jackson");
		// list.add("rose");
		// list.add("jill");
		// list.add("ada");
		// list.add("hanmeimei");
		// list.add("lilei");
		// list.add("hongtaoliu");
		// list.add("Jerry");
		list.add("波多老师");
		list.add("小泽老师");
		list.add("苍老师");
		System.out.println(list);
		//按照字符多少排序
		// Collections.sort(list);
		// Collections.sort(list, new Comparator() {
		// public int compare(String o1, String o2) {
		 return o1.length()-o2.length();
		// return o2.length()-o1.length();//反过来减就是降序
		// }
		// });
		Collections.sort(list,(o1,o2)->o2.length()-o1.length());
		System.out.println(list);
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/348858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号