JAVA集合类.docx
- 文档编号:11537159
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:18
- 大小:286.64KB
JAVA集合类.docx
《JAVA集合类.docx》由会员分享,可在线阅读,更多相关《JAVA集合类.docx(18页珍藏版)》请在冰豆网上搜索。
JAVA集合类
集合类
1、概述
容器:
数组要求长度确定,可以存放基本数据,引用类型数据。
集合类:
JDK中设计了这样一种类,功能用于存储各种各样方式的数据。
一般也称为容器类。
容器类JDK包括一系列的接口、类,因此对这样的接口和类的设计统称为容器框架。
动态添加,不用受长度的限制。
实现原理:
数组的方式(ArrayList);链表的方式(LinkedList)。
Java的集合类是一种特别有用的工具类,一般包括List、Map、Set三个系列。
Set代表的是无序的,不可重复的集合。
【重写equals方法和hashCode方法】
List代表的是有序的,可重复的集合。
Map代表的是键值对的形式,代表具有映射关系的集合。
【key---》value】
Collection和Collections区别?
Collection是集合类的父接口。
Collections是针对集合的工具类。
final、finally、finalize三个有什么区别?
在集合框架中,提供的存储方式分类:
v按照索引值操作数据(get方法【get(intindex)】)
实现这种类型的类一般都实现java.util.Collection接口。
v按照名称操作数据(get方法【get(Stringkey)】)
实现这种类型的类一般都实现java.util.Map接口。
这里按照索引值操作继续细化:
v允许重复元素
这些类都实现java.util.List接口
v不允许重复元素
这些类都实现java.util.Set接口
Iterator:
迭代器,主要用于做数据输出。
ListIterator:
Iterator?
?
?
?
?
?
?
?
?
?
?
?
?
2、Collection接口
publicstaticvoidmain(String[]args){
Stack
s.add("asad1");//元素添加
s.add("asad2");
s.add("asad3");
s.add("asad4");
Stack
s1.addAll(s);//添加容器
Object[]obj=s1.toArray();//将栈转换为数组
for(Objecto:
obj){
System.out.println(o);
}
System.out.println(s1.size());//测试栈中包含元素大小
System.out.println(s1.contains("as"));//测试栈中是否包含某元素
Iterator
Stack?
?
?
?
?
?
while(iter.hasNext()){//?
?
?
?
?
?
?
?
?
?
?
?
?
?
Stringo=iter.next();//?
?
?
?
?
?
?
?
System.out.println(o);
}
}
作业:
利用Stack类,存储10个学生。
获取有多少个学生?
测试是否包含某个学生?
使用普通的循环遍历学生的信息?
使用迭代器的方式遍历学生信息?
查API:
Collection、Stack
publicclassStudent{
privateStringname;
privateintage;
publicStudent(Stringname,intage){
super();
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
};
publicStudent(){
}
}
publicstaticvoidmain(String[]args){
Stack
?
?
?
?
?
?
?
?
?
?
?
?
Student?
Studentst=null;
for(inti=0;i<10;i++){
s.add(newStudent("?
"+i,newRandom().nextInt(99)));
s.add(st);
}
System.out.println(s.size());//?
?
?
?
?
?
?
?
?
?
?
?
/**
*?
?
?
?
?
?
*/
Object[]students=s.toArray();
for(Objectobj:
students){
Studentstudent=(Student)obj;
System.out.println(student.getName()+"\t"+student.getAge());
}
/**
*?
?
?
?
?
*/
Iterator
for(;iter.hasNext();){
Students1=iter.next();
System.out.println(s1.getName()+"\t"+s1.getAge());
}
}
?
?
?
?
:
?
?
?
?
?
?
?
?
?
Studentst=newStudent();
for(inti=0;i<10;i++){
st.setName("A"+i);
st.setAge(i);
s.add(st);
}
?
?
?
?
?
?
?
?
?
?
?
?
A99
?
?
?
for?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
(?
?
?
?
),?
?
?
?
?
?
?
?
3、List接口
indexOf和lastindexOf区别:
List允许有重复元素。
Add方法做添加
Set方法做修改
Get方法做查询
Remove做删除
Iterator做遍历
ArrayList适合做查询功能,数组。
LinkedList适合做删除功能,链表。
自学ArrayList类:
功能模块:
1.添加2.修改3.删除4.遍历5.大小6.包含
4、ArrayList
vadd?
?
booleanadd(Objecto)
?
?
?
?
?
?
?
?
?
?
?
o?
?
?
?
?
?
?
?
?
?
?
?
?
add?
?
:
voidadd(intindex,Objectelement)
?
?
?
?
?
?
?
?
?
?
element?
?
?
?
?
?
?
?
?
?
index?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
vaddAll?
?
booleanaddAll(Collectionc)
?
?
?
?
?
?
?
?
?
?
?
?
c?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
addAll?
?
:
booleanaddAll(intindex,Collectionc)
?
?
?
?
?
?
?
?
?
?
?
?
c?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
index?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
index+1?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
index?
?
index?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
。
vget?
?
Objectget(intindex)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
index?
?
?
?
?
?
?
vindexOf?
?
intindexOf(Objecto)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
o,?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
-1?
?
?
?
?
?
?
lastIndexOf?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
-1?
vremove?
?
Objectremove(intindex)
?
?
?
?
?
?
?
?
?
?
?
?
?
index?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
remove?
?
:
booleanremove(Objecto)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
o?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
true,?
?
?
?
false?
?
?
?
?
?
?
?
remove?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
vset?
?
Objectset(intindex,Objectelement)
?
?
?
?
?
?
?
?
?
?
?
?
?
index?
?
?
?
?
?
?
?
?
?
?
?
?
?
element?
?
?
?
vsize?
?
intsize()
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
vtoArray?
?
Object[]toArray()
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
Object?
?
?
作业:
1.针对Teacher类添加多个学生,此时输出该老师有多少名学生,并拿出具体的某个学生信息。
2.使用ListIterator逆序输出ArrayList中元素
publicstaticvoidmain(String[]args){
List
=newArrayList
?
?
ArrayList
for(inti=0;i<10;i++){
list.add(newStudent("B"+i,i));
}
Studentstu=null;
for(intj=0;j stu=list.get(j); System.out.println(stu.getName()); } System.out.println(list.size());//? ? List? ? ? ? ? ? ? ? ListIterator list.listIterator(list.size()); /*while(students.hasNext()){ students.next();//? ? ? ? ? ? ? ? ? ? ? ? }*/ while(students.hasPrevious()){ System.out.println(students.previous().getName()); } } 其实由后面的元素往前面输出,还有另外的方式,即get? ? ? 5、List子类Vector Stack(栈)和Vector(向量)。 栈: 增(add)、。 。 。 。 。 、push(入栈)、pop(出栈) 向量: GUI中AWT有很多地方使用向量的形式。 publicstaticvoidmain(String[]args){ Vector v.add("1"); v.add("2"); v.add("3"); System.out.println(v.size()); for(inti=0;i Stringstr=v.get(i); System.out.println(str); } Iterator while(it.hasNext()){ System.out.println(it.next()); } Enumeration while(en.hasMoreElements()){ System.out.println(en.nextElement()); } } ArrayList和Vector区别: ArrayList推出时间1.2 Vector是1.0版本, ArrayList采用异步处理方式,性能更高 Vector采用同步处理方式,性能较低 非线程安全 线程安全 Iterator和foreach(get) Iterator、foreach(get)、Enumeration Vector在后面界面编程时会使用(AWT1.0)。 ArrayList在以后中高级阶段多使用。 6、List子类LinkedList 作业: 1.在链表的开头和结尾部分添加元素addFirstaddLast方法 2.找到表头 ●找到表头element方法 ●找到不删除表头peek方法 ●找到删除表头poll方法 3.已先进先出方式遍历元素poll方法 7、ArrayList实现原理 vArrayList特点 ArrayList实现了长度可变的数组的功能。 可以通过索引位置快速地对集合进行随机访问。 缺点是在指定的索引位置插入对象或删除对象速度较慢,因为索引位置之后的元素会随之进行移位操作。 v作业 1.模仿ArrayList自定义容器对象MyArrayList a>实现ArrayList(),ArrayList(intinitialCapacity)构造函数; b>定义voidadd(Objectvalue)方法 //voidadd(intindex,Objectvalue); voidremove(intindex)? ? voidremove(Objectvalue)? ? voidset(intindex,Objectvalue)? ? intsize()? ? Objectget(intindex)? ? booleancontains(Objectvalue) 然后测试自定义的容器。 Arrays.copyOf(? ? ? ? ? ? ? ); System.arraycopy(? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ); 2.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? : push? pop 队列: poll、peek、..... 8、Set系列 vTreeSet TreeSet是已经改装的Set,是一种树形结构的Set集合。 第一: 不允许重复元素出现 第二: 尽管Set集合是说无序的,但是TreeSet是有序的【重写compareTo方法】。 Set ? ? TreeSet? ? set.add("C"); set.add("B"); set.add("A"); set.add("C"); set.add("A"); set.add("C"); System.out.println(set);//? ? ? ? ? ? ? ? ? ? ? 作业: 往TreeSet集合中添加Person对象,验证是否能添加成功? 如果不成功如何处理? publicclassPerson{ privateStringname; privateintage; ..... } publicstaticvoidmain(String[]args){ Set ? ? TreeSet? ? set.add(newPerson("? ? ? ",23)); set.add(newPerson("? ? ? ",22)); set.add(newPerson("? ? ? ",22)); System.out.println(set); } 错误: com.csu.edu.set.Personcannotbecasttojava.lang.Comparable ? ? ? ? : ? ? Comparable接口。 因为TreeSet是有序存放数据,所以需要重写compareTo方法。 publicclassPersonimplementsComparable @Override publicintcompareTo(Persono){//? ? ? ? ? ? ? ? ? if(this.age>o.age){ return1; }elseif(this.age return-1; }else{ returnpareTo(o.name); } } } vHashSet 第一: 不允许重复元素【前提要求对类equals和hashCode方法进行重写】 第二: 元素的顺序无序的。 publicstaticvoidmain(String[]args){ Set ? ? TreeSet? ? set.add(newPerson("? ? ? ",23)); set.add(newPerson("? ? ? ",22)); set.add(newPerson("? ? ? ",22)); set.add(newPerson("? ? ? 2",32)); set.add(newPerson("? ? ? 3",24)); System.out.println(set); } 发现有重复内容,因此需要重写equals方法和hashCode方法。 1.可以不重写hashCode方法,但是必须重写equals方法。 2.如果equals方法全设置true,那么必须重写hashCode方法。 3.如果类中重写了hashCode方法和equals方法,那么先查找hashCode返回的值是否相等。 如果不相等的话,不会判断equals方法。 如果是相等的话,针对equals方法进行判断。 如果判断两个对象的equals方法相等,那么hashCode相等。 但是判断两个对象的hashCode相等,那么其内容不一定相等。 高级阶段【Hibernate数据库处理框架】 作业: 利用前面学过的容器框架,实现学生成绩的录入功能。 【建议使用ArrayList、Vector、HashSet类】。 并提供打印功能。 另外也提供搜索功能: 例如提供学生的姓名打印出该学生的成绩。 疑问: 目前已经学了很多种集合类,那么集合类使用add方法时能不能添加基本类型的数据? 如果不能,为什么? 如果能的话,那么原因是? 不能添加基本类型。 但是在JDK1.5之后可以的原因,是因为有基本类型的装箱操作。 9、HashMap v概述 提供的是一种“名称=值”存储。 名称不可以重复。 值可以为引用类型【基本类型在1.5之后可以是因为装箱操作】。 当名称一致的话,后面的添加操作会覆盖前面名称一致的值。 map.put("username",3); map.put("username",5); v常用方法 put(Objectkey,Objectvalue): 存值操作 get(key): 根据键值获取键值所对应的内容 keySet(): 返回Map中的所有的key值,组装成了Set集合。 Values(): 将Map类型转换为Collection接口类型。 publicstaticvoidmain(String[]args){ Map map.put("username",3); map.put("username",5); map.put("pass",1); map.put(null,2); System.out.println(map.get(null)); System.out.println(map); Collection for(Iterator iter.hasNext();){ System.out.println(iter.next()); } Set for(Iterator set.iterator();iter.hasNext();){ System.out.println(iter.next()); } } v作业 1.制作电子词典,提供中英文互译功能。 Map map.put("hello","? ? "); map.put("hi","? ? "); Set for(Stringkey: english){ System.out.println(map.get(key)); } 2.使用ArrayList存放大量数据,并使用HashMap存放ArrayList中内容。 可以通过键值获取到ArrayList中数据。 List Wordword1=newWord("? ? ","SpringisComing! "); Wordword2=newWord("? ? ","Springissweet! "); list.add(word1); list.add(word2); Map newHashMap maps.put("spring",list); List for(Wordword: list1){ System.out.println(word.getMean()+"\t" +word.getDescription
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 集合
![提示](https://static.bdocx.com/images/bang_tan.gif)