[学习笔记] Java面向对象之集合框架
# 学习 # · 2020-06-30
集合框架概述
1、集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:
(1)接口:是代表集合的抽象数据类型。接口允许集合独立操纵其代表的细节。在面向对象的语言,接口通常形成一个层次。
(2)实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构。
(3)算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
2、Java集合框架的类接口:
(1)Collection 接口:存储一组不唯一,无序的对象。
(2)Set接口:继承Collection接口,存储一组唯一,无序的对象。
(3)List 接口:存储一组不唯一,有序(插入顺序)的对象。
(4)Map接口:存储一组键值对象,提供key到value的映射。
(5)Iterator接口:负责定义访问和遍历元素的接口。
List接口
1、ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
2、LinkedList采用链表存储方式。插入、删除元素时效率比较高。
3、ArrayList集合类:
/**
* 测试ArryList的add()、size()、get()方法。
*/
public class Test1 {
public static void main(String[] args) {
// 1、创建四个狗狗对象
Dog ououDog = new Dog("欧欧", "雪娜瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪娜瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
// 2、创建ArrayList集合对象并把四个狗狗对象放入其中
List dogs = new ArrayList();
dogs.add(ououDog);
dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(2, feifeiDog); // 添加feifeiDog到指定位置
// 3、输出集合中狗狗的数量
System.out.println("共计有" + dogs.size() + "条狗狗。");
// 4、通过遍历集合显示各条狗狗信息
System.out.println("分别是:");
for (int i = 0; i < dogs.size(); i++) {
Dog dog = (Dog)dogs.get(i);、
System.out.println(dog.getName() + "\t" + dog.getStrain());
}
}
}
/**
* 测试ArryList的remove()、contains()方法。
*/
public class Test2 {
public static void main(String[] args) {
// 1、创建多个狗狗对象
Dog ououDog = new Dog("欧欧", "雪娜瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪娜瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
// 2、创建ArrayList集合对象并把多个狗狗对象放入其中
List dogs = new ArrayList();
dogs.add(ououDog);
dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(2, feifeiDog);
// 3、输出删除前集合中狗狗的数量
System.out.println("删除之前共计有" + dogs.size() + "条狗狗。");
// 4、删除集合中第一个狗狗和feifeiDog狗狗
dogs.remove(0);
dogs.remove(feifeiDog);
// 5、显示删除后集合中各条狗狗信息
System.out.println("\n删除之后还有" + dogs.size() + "条狗狗。");
System.out.println("分别是:");
for (int i = 0; i < dogs.size(); i++) {
Dog dog = (Dog)dogs.get(i);
System.out.println(dog.getName() + "\t" + dog.getStrain());
}
// 6、判断集合中是否包含指定狗狗信息
if(dogs.contains(meimeiDog)){
System.out.println("\n集合中包含美美的信息");
} else {
System.out.println("\n集合中不包含美美的信息");
}
}
}
4、LinkedList集合类:
/**
* 测试LinkedList的多个特殊方法。
*/
public class Test3 {
public static void main(String[] args) {
// 1、创建多个狗狗对象
Dog ououDog = new Dog("欧欧", "雪娜瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪娜瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
// 2、创建LinkedList集合对象并把多个狗狗对象放入其中
LinkedList dogs = new LinkedList();
dogs.add(ououDog);
dogs.add(yayaDog);
dogs.addLast(meimeiDog);
dogs.addFirst(feifeiDog);
// 3、查看集合中第一条狗狗的昵称
Dog dogFirst=(Dog)dogs.getFirst();
System.out.println("第一条狗狗的昵称是"+dogFirst.getName()+"。" );
// 4、查看集合中最后一条狗狗的昵称
Dog dogLast=(Dog)dogs.getLast();
System.out.println("最后一条狗狗的昵称是"+dogLast.getName()+"。" );
// 5、删除集合中第一个狗狗和最后一个狗狗
dogs.removeFirst();
dogs.removeLast();
// 6、显示删除部分狗狗后集合中各条狗狗信息
System.out.println("\n删除部分狗狗后还有" + dogs.size() + "条狗狗。");
System.out.println("分别是:");
for (int i = 0; i < dogs.size(); i++) {
Dog dog = (Dog)dogs.get(i);
System.out.println(dog.getName() + "\t" + dog.getStrain());
}
}
}
Map接口
1、HashMap集合类:
/**
* 测试HashMap的多个方法。
*/
public class Test4 {
public static void main(String[] args) {
// 1、使用HashMap存储多组国家英文简称和中文全称的键值对
Map countries = new HashMap();
countries.put("CN", "中华人民共和国");
countries.put("RU", "俄罗斯联邦");
countries.put("FR", "法兰西共和国");
countries.put("US", "美利坚合众国");
// 2、显示"CN"对应国家的中文全称
String country = (String) countries.get("CN");
System.out.println("CN对应的国家是:" + country);
// 3、显示集合中元素个数
System.out.println("Map中共有"+countries.size()+"组数据");
/*4、两次判断Map中是否存在"FR"键*/
System.out.println("Map中包含FR的key吗?" + countries.containsKey("FR"));
countries.remove("FR");
System.out.println("Map中包含FR的key吗?" + countries.containsKey("FR"));
/* 5、分别显示键集、值集和键值对集*/
System.out.println(countries.keySet());
System.out.println(countries.values());
System.out.println(countries);
/* 3、清空 HashMap并判断*/
countries.clear();
if(countries.isEmpty()){
System.out.println("已清空Map中数据!");
}
}
}
迭代器Iterator和增强for循环
/**
* 测试通过Iterator和增强型for循环遍历Map集合
*/
public class Test5 {
public static void main(String[] args) {
/* 1、创建多个狗狗对象*/
Dog ououDog = new Dog("欧欧", "雪娜瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪娜瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
/* 2、创建Map集合对象并把多个狗狗对象放入其中*/
Map dogMap=new HashMap();
dogMap.put(ououDog.getName(),ououDog);
dogMap.put(yayaDog.getName(),yayaDog);
dogMap.put(meimeiDog.getName(),meimeiDog);
dogMap.put(feifeiDog.getName(),feifeiDog);
/*3、通过迭代器依次输出集合中所有狗狗的信息*/
System.out.println("使用Iterator遍历,所有狗狗的昵称和品种分别是:");
Set keys=dogMap.keySet();//取出所有key的集合
Iterator it=keys.iterator();//获取Iterator对象
while(it.hasNext()){
String key=(String)it.next(); //取出key
Dog dog=(Dog)dogMap.get(key); //根据key取出对应的值
System.out.println(key+"\t"+dog.getStrain());
}
/*
//使用foreach语句输出集合中所有狗狗的信息
//for(元素类型t 元素变量x : 数组或集合对象){
// 引用了x的java语句
//}
for(Object key:keys){
Dog dog=(Dog)dogMap.get(key); //根据key取出对应的值
System.out.println(key+"\t"+dog.getStrain());
}
*/
}
}
泛型集合
/**
* 测试对List应用泛型。
*/
public class Test6 {
public static void main(String[] args) {
/* 1、创建多个狗狗对象*/
Dog ououDog = new Dog("欧欧", "雪娜瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪娜瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
/* 2、创建ArrayList集合对象并把多个狗狗对象放入其中*/
List<Dog> dogs = new ArrayList<Dog>();//标记元素类型
dogs.add(ououDog)
dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(2, feifeiDog); // 添加feifeiDog到指定位置
//dogs.add("hello"); //出现编译错误,元素类型不是Dog。
/* 3、 显示第三个元素的信息*/
Dog dog3 = dogs.get(2); //无需类型强制转换
System.out.println("第三个狗狗的信息如下:");
System.out.println(dog3.getName() + "\t" + dog3.getStrain());
/*4、使用foreach语句遍历dogs对象*/
System.out.println("\n所有狗狗的信息如下:");
for(Dog dog:dogs){//无需类型强制转换
System.out.println(dog.getName() + "\t" + dog.getStrain());
}
}
}
/**
* 测试对Map应用泛型。
*
*/
public class Test7 {
public static void main(String[] args) {
/* 1、创建多个狗狗对象*/
Dog ououDog = new Dog("欧欧", "雪娜瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪娜瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
/* 2、创建Map集合对象并把多个狗狗对象放入其中*/
Map<String,Dog> dogMap=new HashMap<String,Dog>();
dogMap.put(ououDog.getName(),ououDog);
dogMap.put(yayaDog.getName(),yayaDog);
dogMap.put(meimeiDog.getName(),meimeiDog);
dogMap.put(feifeiDog.getName(),feifeiDog);
/*3、通过迭代器依次输出集合中所有狗狗的信息*/
System.out.println("使用Iterator遍历,所有狗狗的昵称和品种分别是:");
Set<String> keys=dogMap.keySet();//取出所有key的集合
Iterator<String> it=keys.iterator();//获取Iterator对象
while(it.hasNext()){
String key=it.next(); //取出key
Dog dog=dogMap.get(key); //根据key取出对应的值
System.out.println(key+"\t"+dog.getStrain());
}
/*
//使用foreach语句输出集合中所有狗狗的信息
for(String key:keys){
Dog dog=dogMap.get(key); //根据key取出对应的值
System.out.println(key+"\t"+dog.getStrain());
}*/
}
}
如无特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/34/
如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/34/
评论