一、集合与数组的关系
数组是大小固定的,并且同一个数组只能存放类型一样的数据,基本类型或者是引用类型,而java集合可以存储和操作数目不固定的一组数据,所有的java集合都位于java.util包中,java 集合只能存放引用类型的数据,不能存放基本数据类型。
二、集合框架包含的内容
接口:Collection、Map
关系图
Collection接口的特点:存储一组不唯一、无序的对象;
List接口:存储一组不唯一、有序的对象;
Set接口:存储一组唯一、无序的对象;
ArrayList与LinkedList:
用法基本相同,LinkedList比ArrayList多了一对first和last属性,用于add、get和remove。如果是查询多用ArrayList,增加和删除多用LinkedList。
//创建企鹅信息
Penguins penguins0=new Penguins("小白","男");
Penguins penguins1=new Penguins("美美","男");
Penguins penguins2=new Penguins("小北","男");
Penguins penguins3=new Penguins("小白","男");
ArrayList<Penguins> penguins=new ArrayList<>();
penguins.add(penguins0);
penguins.add(penguins1);
penguins.add(penguins2);
penguins.add(penguins3);
System.out.println("共有"+penguins.size()+"只企鹅");
for (Penguins penguins4:penguins) {
System.out.println(penguins4.getName()+" "+penguins4.getSex());
}
//删除
penguins.remove(penguins0);
System.out.println("删除后还有"+penguins.size()+"只企鹅");
System.out.println("分别是");
for (Penguins penguins4:penguins) {
System.out.println(penguins4.getName()+" "+penguins4.getSex());
}
//是否包含
if (penguins.contains(penguins2)) {
System.out.println("集合中包含");
}
HashSet和treeSet
与list的用法基本相似,只是不能重复添加对象,且没有下标值。如果属性相同,对象名不同,仍能添加并显示信息。
TreeSet可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
使用TreeSet时,类中要有Comparable接口;
例如
测试类
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stu1=new Student(11,"金时");
Student stu2=new Student(10,"银时");
Student stu3=new Student(13,"神乐");
Student stu4=new Student(16,"新八");
Set<Student> students=new TreeSet<>();
students.add(stu1);
students.add(stu2);
students.add(stu3);
System.out.println("共有"+students.size()+"个同学");
for (Student student : students) {
System.out.println(student.getStudentNo()+" "+student.getName());
}
if (students.contains(stu2)) {
students.remove(stu2);
}
System.out.println("共有"+students.size()+"个同学");
for (Student student : students) {
System.out.println(student.getStudentNo()+" "+student.getName());
}
if (students.contains(stu3)) {
System.out.println(stu3.getName());
}
}
Map接口
HashMap特点:
通常存入的是一对数据,Map<k,v>
,K就是你指定的关键词,通过key值就能找到value。
HashMap不可重复添加对象,无下标值,且key值是唯一不可重复的。
HashMap比ArrayList更方便查找。
Map接口常用的方法
例如:
Student stu1=new Student(11,"金时");
Student stu2=new Student(10,"银时");
Student stu3=new Student(13,"神乐");
Student stu4=new Student(16,"新八");
//创建泛型集合
Map<Integer, Student> stus=new HashMap<>();
//增加信息
stus.put(stu1.getStudentNo(), stu1);
stus.put(stu2.getStudentNo(), stu2);
stus.put(stu3.getStudentNo(), stu3);
stus.put(stu4.getStudentNo(), stu4);
System.out.println("共有"+stus.size()+"位同学");
//获取
Student student=stus.get(10);
System.out.println(student.getStudentNo()+" "+student.getName());
//删除
stus.remove(13);
System.out.println("共有"+stus.size()+"位同学");
if (stus.containsKey(16)) {
System.out.println(stus.get(16).getName());
}
Map中的循环
1.增强for循环
遍历所有的key值
//获取map 里的key值
Set<Integer> keys=stus.keySet();
for (Integer key : keys) {
System.out.println(key);
System.out.println(stus.get(key).getName());
}
遍历所有的value值
//获取map里所有value值
Collection<Student> values=stus.values();
for (Student stud : values) {
System.out.println(stud.getStudentNo()+" "+stud.getName());
}
2.迭代器Iterator实现循环
//获取map 里的key值
Set<Integer> keys=stus.keySet();
Iterator<Integer> it=keys.iterator();
while (it.hasNext()) {
Integer key=it.next();
System.out.println(key);
}
//获取map里所有value值
Collection<Student> values=stus.values();
Iterator<Student> its=values.iterator();
while(its.hasNext()){
Student student1=its.next();
System.out.println(student1.getStudentNo()+" "+student1.getName());
}
集合类的对比