概述
一、概述
1.Java集合框架中的两大类接口
分别是Collection接口和Map接口。两者属于不同的类,也继承于两个不同的接口类,在存储方式上有着本质的不同。
2.举例说明两者个继承于哪些接口类:
List & ArrayList
先使用父类变量List实例化一个子类对象ArrayList集合
之后转到List的定义处,可以看到List继承于Collection类
再转到ArrayList的定义处,可以看到ArrayList继承于一个抽象的List集合类,但是马上会发现ArrayList还实现了一个List接口,再看上面的图,能够明白,ArrayList其实就是List的实现子类,最终都实现了List这个集合类。
Map
& HashMap
先使用父类变量Map实例化一个子类对象HashMap集合
之后转到List的定义处,可以看到Map其实就是一个Map集合接口
再转到HashMap的定义处,可以看到HashMap继承了一个抽象Map类,但实现了一个Map集合接口,同样能够发现HashMap就是Map的实现子类。
二、代码示例
1.使用HashMap存储城市信息的代码(Total Class:1):
/
public class RecoveryText {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 实例化第一个狗类对象并赋初值
Dog ououDog = new Dog("欧欧", "雪娜瑞");
// 实例化第二个狗类对象并赋初值
Dog yayaDog = new Dog("亚亚", "拉布拉多");
// 实例化第三个狗类对象并赋初值
Dog meimeiDog = new Dog("美美", "雪娜瑞");
// 实例化第四个狗类对象并赋初值
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
Map pets = new HashMap();
pets.put(ououDog.getName(), ououDog);
pets.put(yayaDog.getName(), yayaDog);
pets.put(meimeiDog.getName(), meimeiDog);
pets.put(feifeiDog.getName(), feifeiDog);
System.out.println("使用Iterator迭代器遍历如下:");
//
使用Set接口的KeySet()方法将集合中所有的键的值取出来,此时keyCollection变量中就存储这HashMap集合中所有的键的值(不包含键所对应的值)
Set keyCollection = pets.keySet();
// 因所有集合和类接口都未提供专门的遍历方法,故要使用Iterator迭代器遍历键的值集合中的每一个键元素
Iterator it = keyCollection.iterator();
System.out.println("狗狗昵称t狗狗品种");
// 判断是否是一个有效的值(等效于C#中对SQLDataReader对象的Read()方法)
while (it.hasNext()) {
// 取出键的值
String key = (String) it.next();
// 因为任何集合中都是存着Object类型的数据,取值时仍需强转
// 使用get()方法,根据已获取到的key获取对应的值
Dog dog = (Dog) pets.get(key);
// 最后输出即可
System.out.println(dog.getName() + "tt" +
dog.getStrain());
}
}
}
小提示:
在使用Iterator迭代器与While循环结合遍历HashMap集合时,需要使用的组合为:
HashMap+Set+Iterator+While
Set接口用于将集合中所有的Key(键)取出,组成一个键的集合;
Iterator接口用于根据Set接口组合好的键的集合进行遍历工作;
为什么偏偏要用While循环时,这两个接口都要使用呢?
原因是While不具备再循环运行时依次取出集合中的元素的功能,所以需要使用迭代器依次取出元素遍历。
有些同学可能注意到put元素时的顺序和最后结果输出的顺序不大一样,这不是错误,原因是HashMap本身就没有要求对Key或Value的值有序,所以结果无序当然是理所应当了!
3.使用泛型集合ArrayList输出狗狗信息的代码(Total
Class:4):
/
public class RecoveryTestByArrayList {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 实例化第一个狗类对象并赋初值
Dog ououDog = new Dog("欧欧", "雪娜瑞");
// 实例化第二个狗类对象并赋初值
Dog yayaDog = new Dog("亚亚", "拉布拉多");
// 实例化第三个狗类对象并赋初值
Dog meimeiDog = new Dog("美美", "雪娜瑞");
// 实例化第四个狗类对象并赋初值
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
// 实例化HashMap对象,此处使用泛型对放入的元素类型加以约定
List pets = new ArrayList();
pets.add(ououDog);
pets.add(yayaDog);
pets.add(meimeiDog);
pets.add(feifeiDog);
System.out.println("使用ArrayList+增强型for循环(foreach)输出狗狗信息如下:");
System.out.println("狗狗昵称t狗狗品种");
for (Dog dog : pets)
{
System.out.println(dog.getName() + "tt" +
dog.getStrain());
}
}
}
小提示:
增强型for循环格式:
for(元素类型t 元素变量x:数组或集合对象){
//引用了x的Java语句
}
增强型for循环的运行顺序:
先走到数组或集合对象中去,依次取出里面的对象,循环一次取一个元素,将取出的元素放到冒号前面的元素变量中,进行循环遍历。
或许会注意到,为什么循环中取值无需强转就能成功取值?
原因是使用了泛型集合,若在放置元素时就对元素类型进行约定,则取值时就无需繁琐的强转了,那样不但繁琐,还容易报ClassCastException(类型转换异常)。
4.使用泛型集合HashMap输出狗狗信息的代码(Total
Class:4):
/
public class RecoveryTestByHashMap {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 实例化第一个狗类对象并赋初值
Dog ououDog = new Dog("欧欧", "雪娜瑞");
// 实例化第二个狗类对象并赋初值
Dog yayaDog = new Dog("亚亚", "拉布拉多");
// 实例化第三个狗类对象并赋初值
Dog meimeiDog = new Dog("美美", "雪娜瑞");
// 实例化第四个狗类对象并赋初值
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
// 实例化HashMap对象,此处使用泛型对放入的元素类型加以约定
Map pets = new HashMap();
pets.put(ououDog.getName(), ououDog);
pets.put(yayaDog.getName(), yayaDog);
pets.put(meimeiDog.getName(), meimeiDog);
pets.put(feifeiDog.getName(), feifeiDog);
System.out.println("使用HashMap+Iterator迭代器输出狗狗信息如下:");
Set keyColl = pets.keySet();
Iterator it = keyColl.iterator();
System.out.println("狗狗昵称t狗狗品种");
while (it.hasNext()) {
// 此处由于使用了泛型元素类型的约束,所以【都不需要强制类型转换】
String key = it.next();
// 此处由于使用了泛型元素类型的约束,所以【都不需要强制类型转换】
Dog dog = pets.get(key);
System.out.println(dog.getName() + "t" +
dog.getStrain());
}
}
}
小提示:
使用ArrayList+增强型for循环(foreach)输出狗狗信息如下:
狗狗昵称 狗狗品种
欧欧 雪娜瑞
亚亚 拉布拉多
美美 雪娜瑞
菲菲 拉布拉多
使用HashMap+Iterator迭代器输出狗狗信息如下:
狗狗昵称 狗狗品种
亚亚 拉布拉多
菲菲 拉布拉多
欧欧 雪娜瑞
美美 雪娜瑞
注意比较RecoveryTestByArrayList类和RecoveryTestByHashMap类的集合输出结果
与Add或Put时的顺序相同或不相同是因为ArrayList是有序存储的,而HashMap是无序存储的
5.使用Iterator迭代器和增强型for循环遍历集合【HashMap】的代码(Total
Class:4):
/
public class RecoveryTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 实例化第一个狗狗对象并赋初值
Dog ououDog = new Dog("欧欧", "雪娜瑞");
// 实例化第二个狗狗对象并赋初值
Dog yayaDog = new Dog("亚亚", "拉布拉多");
// 实例化第三个狗狗对象并赋初值
Dog meimeiDog = new Dog("美美", "雪娜瑞");
// 实例化第四个狗狗对象并赋初值
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
// 实例化一个HashMap对象,此处使用泛型,则取值无序强转
Map pets = new HashMap();
pets.put(ououDog.getName(), ououDog);
pets.put(yayaDog.getName(), yayaDog);
pets.put(meimeiDog.getName(), meimeiDog);
pets.put(feifeiDog.getName(), feifeiDog);
// Set接口取出全部键的集合
Set keysCollections =
pets.keySet();
// Iterator迭代器用于while循环中的键值遍历
Iterator it =
keysCollections.iterator();
System.out.println("使用Iterator迭代器遍历狗狗集合如下:");
System.out.println("狗狗昵称t狗狗性别");
while (it.hasNext())
{
// 取出Key的值
String key = it.next();
// 根据key获取对应的值对象【无需强转】
Dog dog = pets.get(key);
System.out.println(dog.getName() +
"tt" + dog.getStrain());
}
System.out.println("使用增强型for循环(foreach)遍历狗狗集合如下:");
System.out.println("狗狗昵称t狗狗性别");
// 在键的集合里遍历
for (String key :
keysCollections) {
// 根据key获取对应的值对象【无需强转】
Dog dog = pets.get(key);
System.out.println(dog.getName() + "t"
+ dog.getStrain());
}
}
}
小提示:
在使用Iterator迭代器与While循环结合遍历HashMap集合时,需要使用的组合为:
HashMap+Set+Iterator+While
Set接口用于将集合中所有的Key(键)取出,组成一个键的集合;
Iterator接口用于根据Set接口组合好的键的集合进行遍历工作。
在使用Set接口与增强型for循环(foreach)遍历HashMap集合时,需要使用的组合为:
HashMap+Set+Foreach
Set接口用于将集合中所有的Key(键)取出,组成一个键的集合;
特别需要注意的就是使用While和使用Foreach遍历时使用的接口类不同:
While需要使用两个接口,分别是Set和Iterator;
Foreach仅需使用一个接口,Set。
6.使用ArrayList操作集合的代码(Total
Class:4):
/
public class RecoveryTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 实例化第一个企鹅对象并赋初值
Penguin pgn1 = new Penguin("美美", Penguin.FEMALE);
// 实例化第二个企鹅对象并赋初值
Penguin pgn2 = new Penguin("丽丽", Penguin.FEMALE);
// 实例化第三个企鹅对象并赋初值
Penguin pgn3 = new Penguin("花花", Penguin.FEMALE);
// 实例化第四个企鹅对象并赋初值
Penguin pgn4 = new Penguin("明明", Penguin.MALE);
// 实例化第五个企鹅对象并赋初值
Penguin pgn5 = new Penguin("壮壮", Penguin.MALE);
// 实例化第六个企鹅对象并赋初值
Penguin pgn6 = new Penguin("图图", Penguin.MALE);
// 实例化一个HashMap集合
Map pets = new HashMap();
pets.put(pgn1.getName(), pgn1);
pets.put(pgn2.getName(), pgn2);
pets.put(pgn3.getName(), pgn3);
pets.put(pgn4.getName(), pgn4);
pets.put(pgn5.getName(), pgn5);
pets.put(pgn6.getName(), pgn6);
System.out.println("使用Iterator迭代器输出企鹅集合的信息如下:");
// 使用Set接口将全部的键的集合取出
Set keysCollection = pets.keySet();
// 使用Iterator迭代器遍历集合元素
Iterator it = keysCollection.iterator();
System.out.println("企鹅昵称t企鹅性别");
// 使用hasNext()判断是否是有效的数据行
while (it.hasNext()) {
// 取出Key
String key = (String) it.next();
// 根据Key取出对应的值
Penguin pgn = (Penguin) pets.get(key);
// 最后输出
System.out.println(pgn.getName() + "tt" +
pgn.getSex());
}
}
}
8.使用使用Foreach和Iterator遍历企鹅集合的代码(Total
Class:4):
/
public class RecoveryTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//
Penguin aapgn = new Penguin(1, "皑皑", Penguin.FEMALE);
Penguin bbpgn = new Penguin(2, "哔哔", Penguin.FEMALE);
Penguin ccpgn = new Penguin(3, "赛赛", Penguin.MALE);
Penguin ddpgn = new Penguin(4, "迪迪", Penguin.MALE);
Map pets = new HashMap();
pets.put(aapgn.getPenguinId(), aapgn);
pets.put(bbpgn.getPenguinId(), bbpgn);
pets.put(ccpgn.getPenguinId(), ccpgn);
pets.put(ddpgn.getPenguinId(), ddpgn);
System.out.println("使用Iterator迭代器遍历企鹅集合如下:");
Set keysCollections = pets.keySet();
Iterator it = keysCollections.iterator();
System.out.println("企鹅昵称t企鹅性别");
// 使用while循环时,需要Set键的集合和Iterator迭代器配合使用
while (it.hasNext()) {
Integer key = it.next();
Penguin pgn = pets.get(key);
System.out.println(pgn.getName() + "tt" +
pgn.getSex());
}
System.out.println("使用增强型for循环(foreach)遍历企鹅集合如下:");
System.out.println("企鹅昵称t企鹅性别");
//
使用foreach循环时,不需要使用Iterator迭代器而只需要用Set产生的键的集合,因为foreach循环已具备每次循环时取出单个元素进行循环的功能了
for (Integer key : keysCollections) {
Penguin pgns = pets.get(key);
System.out.println(pgns.getName() + "tt" +
pgns.getSex());
}
}
}
最后
以上就是殷勤便当为你收集整理的java用linkedlist编写学生类_【S2第二学期-使用Java实现面向对象编程】Java平台的集合类(List、ArrayList、LinkedListMap、HashMap...的全部内容,希望文章能够帮你解决java用linkedlist编写学生类_【S2第二学期-使用Java实现面向对象编程】Java平台的集合类(List、ArrayList、LinkedListMap、HashMap...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复