首页 > 代码库 > 集合练习
集合练习
package com.lianxi; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import com.hanqi.DataSourceModel; import com.hanqi.Student; public class Practise { public static void main(String[] args) { /* * 准备数据 * 定义一个Student类, 有两个属性, name和age * 定义一个DataSourceModel类, 分别定义三个方法, * 这三个方法分别可以获取到含有内容的List<Student>, Set<Student>, Map<Integer, Student> * Map中的key值, 作为Student的学号, 学号采用自增的方式:从1001开始 * * List练习: * 添加一个学生, 姓名为"Paulo", 年龄为29, 并显示出所有学生姓名 * 删除Jim的信息 * 将所有学生信息按照年龄排序, 由大到小显示出来 * 写一个方法, 将学生分为三组, 并将每组信息显示出来 * 写一个方法, 在数据源中删除重复的学生信息 * 显示出姓名以J开头的学生信息 * 显示出年龄大于25的学生信息 * Set练习 * 重写Student的equals方法, 使得在获取Set的时候没有重复的学生信息 * 显示所有学生信息(不带重复) * Map练习 * 显示所有学生信息, 带学号 * 将第二个Odom更名为Tomson, 并将更名后的学生信息再显示出来 * 将学号为1007的学生删除, 并将删除的学生信息显示 * * Iterator练习 * 取出所有的学号, 迭代之后显示学号为1004-1009 * 并将1005学号的信息删除, 删除之后再显示出所有学生信息 * 选做练习 * ?定义一个专业(Major)类, 属性自拟, 学生信息和这个类关联, 一个学生可以有多个专业 * ?显示所有学生的姓名和所学专业 */ //添加一个学生, 姓名为"Paulo", 年龄为29, 并显示出所有学生姓名 List<Student> list=DataSourceModel.getStuList(); Student stu14 = new Student("Paulo", 29); list.add(stu14); for(Student stu:list){ System.out.println(stu.getName()); } System.out.println(); //删除Jim的信息 Student stu15 = new Student("Jim", 22); list.remove(stu15); System.out.println(list); //将所有学生信息按照年龄排序, 由大到小显示出来 Random r = new Random(); Collections.sort(list); System.out.println(list); /* int x=14; int group = 5; for (int i = 0; i < x; i++) { list.add("no" + i); } for (int i = 0; i < x; i++) { if (i % group == 0) { System.out.println("第" + (i / group + 1) + "组"); } int s = r.nextInt(x - i); if (list.size() == 0) { break; } System.out.println(list.remove(s)); }*/ System.out.println("=============="); int a=0; for(int i=0;i<list.size();i++){ for(int j=0;j<list.size();j++){ if(list.get(i).equals(list.get(j))&&i!=j ){ list.remove(i); } } } System.out.println(list.size()); System.out.println(); for(Student s:list){ if(s.getName().startsWith("J")){ System.out.println(s.getName()+","+s.getAge()); } } Set s=DataSourceModel.getStuSet(); System.out.println(s); System.out.println(s.size()); System.out.println(); Map m=DataSourceModel.getStuMap(); System.out.println(m); m.remove(1007); System.out.println("======================"); System.out.println(m); System.out.println("======================"); Set<Integer> setKey=m.keySet(); Iterator<Integer> i= setKey.iterator(); while(i.hasNext()){ int sno=i.next(); if(sno>=1004&&sno<=1009){ if(sno==1005){ i.remove(); } System.out.println(sno+"---"+m.get(sno)); } } } }
package com.hanqi.jihe; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Lianxi { public static void main(String[] args) { List list=new ArrayList(); list.add("qqq"); list.add("rrr"); list.add("sss"); list.add("ttt"); list.add("yyy"); //没有下标可以提前定义int a =0; /* int a =0; for(Object s:list){ a++; System.out.println(s); System.out.println(a); } */ /* System.out.println(list); Collections.sort(list); System.out.println(list); Collections.shuffle(list); System.out.println(list);*/ /* Map m=new HashMap(); m.put(1, "www"); m.put(2, "rrr"); m.put(3, "ttt"); m.put(4, "uuu"); System.out.println(m.keySet());*/ List list2=new ArrayList(); for(int i=0;i<10;i++){ list2.add(i); } System.out.println(list2); Collections.sort(list2); System.out.println(list2); int a=Collections.binarySearch(list2, 5); System.out.println(a); //Collections.copy(list2, list); System.out.println(list2); } }
接口在输出调用时需要重写equals方法,ToString方法,hashcode方法
自动打包/解包(自动拆箱/装箱)
自动将基础类型转换为对象(装箱)
自动将对想转换为基础数据类型(拆箱)
Comparable接口, Collections类
Collections的常用算法:
sort(List); 排序
如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个类大小的方法
shuffle(List); 随机排列
void reverse(List); 逆序排列(Linked效率较高)
copy(); 复制集合, 前提是size()相同(长度, 和容量的区别)
fill(List, Object);使用某个对象填充整个List
binarySearch();二分搜索法
泛型(Generic)(1.5之后才有泛型)
1, 装入集合的类型都被当作Object对待, 从而失去了自己的实际类型
2, 集合中秋出来的时候需要转型, 效率低, 易出错
好处: 增强程序的可读性和稳定性
总结:
集合是数组的一种延伸, 与数组相比有很多好处和优点,
1, 可以存放不同的类型
2, 长度可变
3, 随时存放和获取
六个接口和一个类:
List
Map
Set
Iterator
Collection
Comparable
Collections类
选择一种集合类型是一件非常痛苦的事
在以后的编程中要考虑读取和修改的效率问题, 数据的存取在以后的使用过程中, Collection是主要的载体,
Array: 读快改慢
Linked: 读慢改快
Hash: 介于两者之间的
集合练习