集合的应用场景:
- 存储数据的数量是动态变化的
- 存储的数据具有一对一的关系(Map)
- 需要对数据进行增删改查
- 数据重复问题(Set)
为什么使用集合而不是数组?因为数组的长度是固定的,不能动态改变。而且数组遍历效率较低。
集合框架体系结构:
1. list, 能够包含有序元素的一个集合,元素之间可以重复。实现类有arraylist,list的首尾添加或者删除元素的时候,效率较高。
import java.util.ArrayList;
public class ArrayListDemo {
//在arraylist中添加课程名称,并输出
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList list = new ArrayList();
list.add("语文");
list.add("数学");
list.add("英语");
list.add("化学");
list.add("物理");
list.add("生物");
System.out.println("列表中课程个数为:" + list.size());
for (int i = 0; i < list.size();i++) {
System.out.println("第" + (i+1) + "门课程是" + list.get(i));
}
// 删除生物之后的课程为
list.remove(list.indexOf("生物"));
System.out.println("删除生物之后的课程为");
for (int i = 0; i < list.size();i++) {
System.out.println("第" + (i+1) + "门课程是" + list.get(i));
}
}
}
2.set,元素无序并且不能重复的结合,称为集。比较重要的实现类是HashSet。set中没有get()来取出元素,需要使用迭代器Iterator来输出元素。
2.1 .Iterator接口可以以统一的方式对各种集合元素进行遍历。两种重要的方法:hasNext()检测是否有下一个元素,Next()取出下一个元素
import java.util.HashSet;
import java.util.Iterator;
public class CatTest {
public static void main(String[] args) {
Cat huahua = new Cat("huahua",12,"英短");
Cat fanfan = new Cat("fanfan",3,"中华田园猫");
HashSet set = new HashSet();
set.add(huahua);
set.add(fanfan);
// 显示set中的宠物猫名称
System.out.println("set中宠物猫有:");
Iterator it = set.iterator();
while(it.hasNext()) {
// System.out.println(((Cat)it.next()).getName());
System.out.println(it.next());
}
}
}
2.2 Hashset中不能添加重复的元素,HashSet通过类方法HashSet()和equals()方法来判断两个对象是否相等。
如果Hashset中存放的不是系统类型对象,而是自定义的对象,比如说新建的类的对象,那么需要重写HashSet中的HashCode()和equals()方法来判断自定义对象是否相等。
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + month;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((species == null) ? 0 : species.hashCode());
return result;
}
/**
* 重新equals方法:
* 1、判断两个对象是不是同一个对象
* 2、判断当前对象 与传入的对象是不是属于同一个类。是,则进行对象内容的比较,返回比较结果
*
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (this.getClass() == Cat.class)
return (((Cat)obj).getMonth() == month) &&
(((Cat)obj).getName().equals(name)) &&
(((Cat)obj).getSpecies().equals(species));
return false;
}
3. HashMap
package com.set;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class HashmapDemo {
public static void main(String[] args) {
Map<String,String> footballMap = new HashMap<String,String>();
int i = 0;
Scanner console = null;
while(i<3) {
System.out.println("请输入第" + (i+1) + "支冠军队伍名称:");
console = new Scanner(System.in);
String value = console.next();
System.out.println("请输入第" + (i+1) + "支队伍夺冠年份:");
console = new Scanner(System.in);
String key = console.next();
// 将信息放入hashmap中
footballMap.put(key, value);
i++;
}
System.out.println("使用迭代器方式输出:");
Iterator<String> it = footballMap.values().iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println("使用EntrySet方式输出:");
Set<Entry<String,String>> entryset = footballMap.entrySet();
// Iterator it2 = entryset.iterator();
// while(it2.hasNext()) {
// System.out.println(it2.next());
// }
for(Entry<String,String>entry:entryset) {
System.out.println(entry.getKey()+"-"+entry.getValue());
}
}
}