1.测试List的contains方法
contains方法返回一个boolean,包含返回true,否则返回false.
此外,由于list集合有序,可通过indexOf方法判断某元素在该list中的位置。如果该元素在list中多次出现,则返回第一次出现的索引位置。而lastindeOf方法返回该元素在list中最后一次出现的位置。如果该元素在list中不存在,返回-1。
重写course中的equals方法:
public class Course {
public String id;
public String name;
public Course()
{
}
public Course(String id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Course other = (Course) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
对list进行测试:
package cn.coll.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
//备选课程类
public class ListTest {
public List coursesToSelect; //存放备选课程的List
public ListTest() {
this.coursesToSelect = new ArrayList();
}
//添加课程
public void testAdd()
{
coursesToSelect.add(new Course("1","数据结构"));//创建一个课程对象,并添加到课程list中
coursesToSelect.add(new Course("2","计算机网络"));//创建一个课程对象,并添加到课程list中
Course[] course = { new Course("3","组成原理"),new Course("4","操作系统")};
coursesToSelect.addAll(Arrays.asList(course));
}
/*
* 测试list中的contains方法
*/
public void testContains()
{
//取得备选课程list中的第一个元素
Course course = (Course)coursesToSelect.get(0);
System.out.println("取得课程:"+course.name);
System.out.println("判断是否包含该课程:"+course.name+","+coursesToSelect.contains(course));
//新建一个课程对象,和course中的id和name值完全相同
Course course2 = new Course(course.id,course.name);
System.out.println("取得课程:"+course2.name);
System.out.println("判断是否包含该课程:"+course2.name+","+coursesToSelect.contains(course2));
}
/*
* 迭代遍历list集合
*/
public void testIterator()
{
Iterator it = coursesToSelect.iterator();
System.out.println("通过迭代器访问集合元素:");
while(it.hasNext())
{
Course cou = (Course)it.next();
System.out.println(cou.id+","+cou.name);
}
}
public void testForEach()
{
System.out.println("通过ForEach方法访问集合元素:");
for(Object obj : coursesToSelect)
{
Course cor = (Course)obj;
System.out.println(cor.id+","+cor.name);
}
}
public static void main(String[] args)
{
ListTest lt = new ListTest();
lt.testAdd();
lt.testIterator();
lt.testContains();
}
}
2.测试Set中的contains方法
使用HashSet,要复写equals和hashcode方法
//在course中复写hashcode和equals方法
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Course other = (Course) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public class SetTest {
public List<Course> coursesToSelect;
private Scanner console;
public SetTest()
{
coursesToSelect = new ArrayList<Course>();
this.console = new Scanner(System.in);
}
public void courseAdd()
{
coursesToSelect.add(new Course("1","数据结构"));
coursesToSelect.add(new Course("2","高等数学"));
coursesToSelect.add(new Course("3","线型代数"));
}
public void testIterator()
{
Iterator<Course> it = coursesToSelect.iterator();
while(it.hasNext())
{
Course cou = it.next();
System.out.println(cou.id+","+cou.name);
}
}
/*
* 创建新的学生对象并选课
*/
public void creatAndSele()
{
//创建学生对象
Student stu = new Student("001","wangcai");
System.out.println("欢迎"+stu.name+"进入选课系统!");
//创建Scanner对象,接收从键盘输入的课程ID
Scanner console = new Scanner(System.in);
//将键盘输入的课程ID和备选课程中的ID进行对比,如果存在该课程,就加入到学生的选课中
for(int i = 0 ; i <3; i++)
{
System.out.println("请输入课程ID:");
String courseID = console.next();
for(Course cr: coursesToSelect)
{
if(cr.id.equals(courseID))
{
stu.courses.add(cr);
}
}
}
System.out.println("您所选的课程为:");
//打印输出学生所选课程
for(Course cr : stu.courses)
{
System.out.println(cr.id+","+cr.name);
}
System.out.println("您 一共选择了"+stu.courses.size()+"门课程");
/*
* 测试set中的contains方法
*/
System.out.println("请输入要查询的课程名称:");
String name = console.next();
Course course = new Course();
course.name = name;
System.out.println("您要查询的课程名称是:"+course.name);
System.out.println("course中是否包含该课程:"+stu.courses.contains(course));
}
public static void main(String[] args)
{
SetTest st = new SetTest();
st.courseAdd();
System.out.println("可选的课程有:");
st.testIterator();
st.creatAndSele();
}
}
3.Collections.sort方法
使用Collection的sort方法,对list的Integer和String,以及其他类型(Student)泛型进行排序。
对Integer和String类型的数据进行排序:
public class CollectionsTest {
/*
* 对List中的Integer泛型进行排序,
* 创建一个长度为10,数据在100以内的随机数的list
* 调用sort方法进行排序
*/
public void testSortInt()
{
List<Integer> intList = new ArrayList<Integer>();
//生成随机数
Random random = new Random();
Integer k;
for(int i = 0 ; i < 10 ; i ++)
{
//确保每次生成的随机数都不相同
do {
k = random.nextInt(100);
}while(intList.contains(k));
intList.add(k);
}
Iterator it = intList.iterator();
System.out.println("排序之前");
while(it.hasNext())
{
System.out.println(it.next());
}
Collections.sort(intList);
System.out.println("排序之后");
for(Integer integer: intList)
{
System.out.println(integer);
}
}
public void stringSort()
{
List<String> strList = new ArrayList<String>();
strList.add("taobao");
strList.add("tianmao");
strList.add("alibaba");
System.out.println("排序之前");
for(String str : strList)
{
System.out.println(str);
}
Collections.sort(strList);
System.out.println("排序之后");
for(String str : strList)
{
System.out.println(str);
}
}
public static void main(String[] args) {
CollectionsTest cot = new CollectionsTest();
cot.testSortInt();
cot.stringSort();
}
}
4.使用Comparable和Comparator对自定义类型数据进行排序
Comparable接口:其实现类要实现compareTo方法,默认使用自然排序。
Comparator接口:其实现类要实现compare方法,不默认比较规则。
实现comparab接口,复写student的compareTo方法:
//在Student类中实现Comparable接口,并复写compareTo方法
@Override
public int compareTo(Student o) {
return this.id.compareTo(o.id);
}
//创建StuComparator类,复写compare接口
public class StuComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.name.compareTo(o2.name);
}
}
//在CollectionTest类中实现Student比较
public void stuSort()
{
List<Student> stuList = new ArrayList<Student>();
Random random = new Random();
stuList.add(new Student(random.nextInt(100)+" ","wangxi"));
stuList.add(new Student(random.nextInt(100)+" ","zhaocai"));
stuList.add(new Student(random.nextInt(100)+" ","jinbao"));
System.out.println("排序前");
for(Student stu: stuList)
{
System.out.println(stu.name);
}
System.out.println("使用Comparable接口排序后");
Collections.sort(stuList);
for(Student stu : stuList)
{
System.out.println(stu.id+","+stu.name);
}
System.out.println("使用Comparator接口排序后");
Collections.sort(stuList,new StuComparator());
for(Student stu : stuList)
{
System.out.println(stu.id+","+stu.name);
}
}