java集合笔记

来源:互联网 发布:mysql可视化建立外键 编辑:程序博客网 时间:2024/06/06 02:48

Collection接口:是List、Set、Queue接口的父接口,定义了可用于操作List、Set、Queue的方法----增删改查

List接口及其实现------ArrayList,List是元素有序并且可以重复的集合,被称为序列。

Set接口实现------HashSet,Set是元素无序并且不可重复的集合,被称为集。HashSet哈希集是Set的一个重要实现类。


Map接口:Map接口提供了一种映射关系,其中元素是以键值对的形式存储的,能够实现根据key快速查找value。

                  Map中的键值对以Entry类型的对象实例形式存在,key不可重复,value可以。Map支持泛型,形式:Map<K,V>

                  HashMap类是Map的一个重要实现类,基于哈希表实现,HashMap中的Entry对象是无序排列的。


简单的学生选课实例:

package com.collection;public class Course {String id;String name;public Course(String id,String name){this.id=id;this.name=name;}public Course(){}}

package com.collection;import java.util.HashSet;import java.util.Set;public class Student {String id;String name;public Set courses;public Student(String id,String name){this.id=id;this.name=name;this.courses=new HashSet();}}
package com.collection;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.zip.CRC32;import org.w3c.dom.ls.LSInput;public class ListTest {public List coursesToSelect;//List是一个接口,创建其子类ArrayList实例化用于存放备选课程public ListTest(){this.coursesToSelect=new ArrayList();}//用于往coursesToSelect中添加备选课程public void testAdd(){//创建一个课程对象,并通过调用add方法,添加到备选课程List中Course cr1=new Course("1", "数据结构");coursesToSelect.add(cr1);//当一个对象被添加到集合中,是会忽略它本来的类型的,只会把它当做一个Object类型Course temp=(Course)coursesToSelect.get(0);//通过get方法取得System.out.println("添加了课程:"+temp.id+","+temp.name);Course cr2=new Course("2", "C语言");coursesToSelect.add(0, cr2);//在对列顶部添加Course temp2=(Course)coursesToSelect.get(0);System.out.println("添加了课程:"+temp2.id+","+temp2.name);//List中元素是可以重复添加的//以下方法会抛出数组下标越界异常//Course cr3=new Course("3", "test");//coursesToSelect.add(4,cr3);Course[] course={new Course("3", "离散数学"),new Course("4", "汇编语言")};coursesToSelect.addAll(Arrays.asList(course));Course temp3=(Course)coursesToSelect.get(2);Course temp4=(Course)coursesToSelect.get(3);System.out.println("添加了两门课程"+temp3.id+","+temp3.name+";"+temp4.id+","+temp4.name);Course[] course2={new Course("5", "高等数学"),new Course("6", "大学英语")};coursesToSelect.addAll(2, Arrays.asList(course2));Course temp5=(Course)coursesToSelect.get(2);Course temp6=(Course)coursesToSelect.get(3);System.out.println("添加了两门课程"+temp5.id+","+temp5.name+";"+temp6.id+","+temp6.name);}//取得List中元素的方法public void testGet(){int size=coursesToSelect.size();//首先取得List的长度System.out.println("有如下课程待选:");for(int i=0;i<size;i++){Course crf=(Course)coursesToSelect.get(i);System.out.println("课程"+crf.id+","+crf.name);}}//通过迭代器类遍历Listpublic void testIterator(){Iterator it=coursesToSelect.iterator();System.out.println("待选课程如下(通过迭代器访问):");while(it.hasNext()){Course cr=(Course)it.next();System.out.println("课程"+cr.id+","+cr.name);}}//通过for eache方法遍历public void testForEach(){System.out.println("通过for each取得待选课程:");for(Object obj:coursesToSelect){Course cr=(Course)obj;System.out.println("课程"+cr.id+","+cr.name);}}//修改课程public void testModify(){coursesToSelect.set(4, new Course("7", "毛概"));}//删除课程public void testRemove(){//Course cr=(Course)coursesToSelect.get(4);//System.out.println("我是课程:"+cr.name+"我即将被删除");//coursesToSelect.remove(4);//System.out.println("删除成功");//删除多个元素Course[] courses={(Course)coursesToSelect.get(4),(Course)coursesToSelect.get(5)};coursesToSelect.removeAll(Arrays.asList(courses));}public static void main(String[] args){ListTest listTest=new ListTest();listTest.testAdd();listTest.testGet();listTest.testIterator();listTest.testForEach();listTest.testModify();listTest.testForEach();listTest.testRemove();listTest.testForEach(); }}

package com.collection;import java.util.ArrayList;import java.util.List;public class testGeneric {//带有泛型Course的List类型属性public List<Course> courses;//构造器,初始化List属性呢public testGeneric(){courses=new ArrayList<Course>();}public void testAdd(){Course cr1=new Course("1", "大学语文");courses.add(cr1);//泛型集合中不能添加泛型类型及其子类型之外的对象,否则会报错Course cr2=new Course("2", "java基础");courses.add(cr2);}//遍历public void testForEach(){for(Course cr:courses){System.out.println(cr.id+cr.name);}}//测试泛型集合可以添加泛型子类型的实例public void testChild(){childCourse ccr=new childCourse();ccr.id="3";ccr.name="我是子类型的课程对象实例值";courses.add(ccr);}public static void main(String[] args) {// TODO Auto-generated method stubtestGeneric tg=new testGeneric();tg.testAdd();tg.testForEach();tg.testChild();tg.testForEach();}}

package com.collection;//测试泛型集合可以添加泛型子类型的实例public class childCourse extends Course{public static void main(String[] args){}}

package com.collection;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Scanner;//测试Set方法public class SetTest {public List<Course> coursesToSelect;public SetTest(){coursesToSelect=new ArrayList<Course>();}public void testAdd(){//创建一个课程对象,并通过调用add方法,添加到备选课程List中Course cr1=new Course("1", "数据结构");coursesToSelect.add(cr1);//当一个对象被添加到集合中,是会忽略它本来的类型的,只会把它当做一个Object类型//Course temp=(Course)coursesToSelect.get(0);//通过get方法取得//System.out.println("添加了课程:"+temp.id+","+temp.name);Course cr2=new Course("2", "C语言");coursesToSelect.add(0, cr2);//在对列顶部添加//Course temp2=(Course)coursesToSelect.get(0);//System.out.println("添加了课程:"+temp2.id+","+temp2.name);////List中元素是可以重复添加的//以下方法会抛出数组下标越界异常//Course cr3=new Course("3", "test");//coursesToSelect.add(4,cr3);Course[] course={new Course("3", "离散数学"),new Course("4", "汇编语言")};coursesToSelect.addAll(Arrays.asList(course));//Course temp3=(Course)coursesToSelect.get(2);//Course temp4=(Course)coursesToSelect.get(3);//System.out.println("添加了两门课程"+temp3.id+","+temp3.name+//";"+temp4.id+","+temp4.name);////Course[] course2={new Course("5", "高等数学"),new Course("6", "大学英语")};//coursesToSelect.addAll(2, Arrays.asList(course2));//Course temp5=(Course)coursesToSelect.get(2);//Course temp6=(Course)coursesToSelect.get(3);//System.out.println("添加了两门课程"+temp5.id+","+temp5.name+//";"+temp6.id+","+temp6.name);}public void testForEach(){System.out.println("通过for each取得待选课程:");for(Object obj:coursesToSelect){Course cr=(Course)obj;System.out.println("课程"+cr.id+","+cr.name);}}public static void main(String[] args){SetTest test=new SetTest();test.testAdd();test.testForEach();//创建一个student对象Student st=new Student("1", "小明");System.out.println("欢迎学生"+st.name+"选课!");//创建一个Scanner对象,用来接收键盘输入的课程IDScanner console=new Scanner(System.in);for(int i=0;i<3;i++){System.out.println("请输入课程ID");String courseId=console.next();for(Course cr : test.coursesToSelect){if(cr.id.equals(courseId)){st.courses.add(cr);}}}for (Course cr : st.courses) {System.out.println("选择了课程"+cr.id+cr.name);}}}


package com.collection;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Scanner;import java.util.Set;public class MapTest {//承装学生类型对象public Map<String, Student> students;//在构造器中初始化student属性public MapTest(){this.students=new HashMap<String,Student>();}//测试添加:输入学生idpublic void testPut(){//获取学生id和姓名Scanner console=new Scanner(System.in);int i=0;while(i<3){System.out.println("请输入学生ID");String ID=console.next();//判断是否被占用Student st=students.get(ID);if(st==null){//提示输入姓名System.out.println("请输入学生姓名");String name=console.next();//创建新的学生对象Student newStudent=new Student(ID, name);//通过调用student的put方法添加id--学生映射students.put(ID, newStudent);System.out.println("成功添加"+students.get(ID).name);i++;}else{System.out.println("该学生ID已经被占用");continue;}}}//测试Map的keySet方法public void testKeySet(){//通过keySet方法,返回Map中的所有“键”的Set集合Set<String>keySet=students.keySet();//取得student的容量System.out.println("总共有"+students.size()+"个学生");//遍历keySet,取得每一个键,再调用get方法取得每个键对应的valuefor(String stuId: keySet){Student st=students.get(stuId);if(st!=null){System.out.println("学生"+st.name);}}}//测试删除Map中的映射public void testRemove(){while(true){System.out.println("请输入要删除的学生ID");Scanner console=new Scanner(System.in);String ID=console.next();//判断该ID是否存在Student st=students.get(ID);if(st==null){System.out.println("该ID不存在,请重新输入要删除的学生ID");continue;}students.remove(ID);System.out.println("成功删除学生"+st.name);break;}}//通过entrySet方法来遍历Mappublic void testEntrySet(){//通过entrySet方法,返回Map中的所有键值对Set<Entry<String,Student>>entrySet=students.entrySet();for (Entry<String, Student> entry : entrySet) {System.out.println("取得键"+entry.getKey());System.out.println("对应的值为"+entry.getValue().name);}}//使用put方法修改Map中已有映射public void testModify(){//提示要修改的IDSystem.out.println("请输入要修改的学生id");Scanner console=new Scanner(System.in);while(true){//取得键盘输入的idString stuId=console.next();//从students中查找学生id对应的学生对象Student student=students.get(stuId);if(student==null){System.out.println("该id不存在,请重新输入");continue;}//提示当前对应的学生对象的姓名System.out.println("当前该学生ID所对应的学生为"+student.name);//提示输入新的学生姓名来修改已有的映射System.out.println("请输入新的学生姓名");String name=console.next();Student newStudent=new Student(stuId,name);students.put(stuId, newStudent);System.out.println("修改成功");break;}}public static void main(String[] args) {MapTest mt=new MapTest();mt.testPut();mt.testKeySet();//mt.testRemove();//mt.testEntrySet();mt.testModify();mt.testEntrySet();}}




1 0