我是靠谱客的博主 殷勤便当,最近开发中收集的这篇文章主要介绍java用linkedlist编写学生类_【S2第二学期-使用Java实现面向对象编程】Java平台的集合类(List、ArrayList、LinkedListMap、HashMap...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、概述

1.Java集合框架中的两大类接口

分别是Collection接口和Map接口。两者属于不同的类,也继承于两个不同的接口类,在存储方式上有着本质的不同。

a4c26d1e5885305701be709a3d33442f.png

2.举例说明两者个继承于哪些接口类:

List & ArrayList

先使用父类变量List实例化一个子类对象ArrayList集合

a4c26d1e5885305701be709a3d33442f.png

之后转到List的定义处,可以看到List继承于Collection类

a4c26d1e5885305701be709a3d33442f.png

再转到ArrayList的定义处,可以看到ArrayList继承于一个抽象的List集合类,但是马上会发现ArrayList还实现了一个List接口,再看上面的图,能够明白,ArrayList其实就是List的实现子类,最终都实现了List这个集合类。

a4c26d1e5885305701be709a3d33442f.png

Map

& HashMap

先使用父类变量Map实例化一个子类对象HashMap集合

a4c26d1e5885305701be709a3d33442f.png

之后转到List的定义处,可以看到Map其实就是一个Map集合接口

a4c26d1e5885305701be709a3d33442f.png

再转到HashMap的定义处,可以看到HashMap继承了一个抽象Map类,但实现了一个Map集合接口,同样能够发现HashMap就是Map的实现子类。

a4c26d1e5885305701be709a3d33442f.png

二、代码示例

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...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部