1.2版本以前:
使用数组,读取数据快,但是数组的长度固定,且只能存放一种数据类型数据
使用vector、stack、properties 。缺点:缺乏统一的操作方式、不易扩展
1.2版本之后,诞生了集合框架
优点:性能提高、操作统一、提高了扩展性、实现了Iterator接口
迭代器:提供了访问元素的统一方法
常用接口和实现类:
集合关系.pngcollection是所有集合的父类接口,不包含Map。
Set继承自collecttion,不允许出现相同元素。
List继承自Collection,以列表形式存储集合。
ArryList(数组列表)
如果没有指定长度,那么长度就默认为10
ArryList的下标和数组一样以0开始
//ArryList
public static void main(String[] args){
//定义一个ArryList类型的集合类
ArrayList<String> arr = new ArrayList<>();
//添加元素"a'、"b"、"c"、"d"
arr.add("a");
arr.add("b");
arr.add("c");
arr.add("d");
arr.add("e");
//打印集合arr的长度
System.out.println("arr的长度是:"+arr.size());
//打印集合arr的所有元素
System.out.println(arr);
//集合的第一个元素
System.out.println(arr.get(0));
//在第一个前面添加一个元素"f"
arr.add(0,"f");
//修改元素
arr.set(1,“LaiShuai”);
}
ArryList和数组的交互
1:将ArryList转化为数组:
String[] arr1 = new String[arr.size()];
arr1 = arr.toArray(arr1);
for(String o: arr1){ System.out.print(o+" ");
}
2://直接将集合1的值赋给集合二
ArrayList<String> arr2 = new ArrayList<>(arr);
System.out.println(arr2);
可扩容
ArrayList<String> arr3 = new ArrayList<>(2);//指定arr3的长度为2
arr3.add("1");
arr3.add("2");
arr3.add("3");
arr3.add("4");
System.out.println(arr3);
LinkedList(链表)
LinkedList<String> list = new LinkedList<String>();
list.add("LaiShaui");
list.add("笨蛋");
list.addLast("sm");
list.addFirst("hy");
System.out.println(list);
LinkedList<String> list2 = new LinkedList<String>();
list.addAll(list);
System.out.println(list2);
list.ppll//获得并移除列表表头
list.peek//获得但不移除表头
Set
HashSet
默认长度为16 ,不允许存储相同的数
表的位置:A%16=X ;X就是A的位置
HashSet set = new HashSet();
set.add("a");
set.add("z");
set.add("q");
set.add("x");
set.add("c");
System.out.println("我是SET:"+set.toString());
String[] setArr = new String[set.size()];
set.toArray(setArr);
System.out.print("我是setArr:");
HashSet hs = new HashSet();
for(String o : setArr){
System.out.print(o+" ");
hs.add(o);
}
System.out.println();
System.out.println(hs);
迭代器Iterate
HashSet Set = new HashSet();
Set.add("a");
Set.add("a");
Set.add("a");
Set.add("a");
Iterator it = Set.iterator();
while (it.hasNext()){
System.out.print(it.next()+" ");
}
MAP
map里的键值是成对存在,且key是唯一的
HashMap:
HashMap<Integer,String> HM = new HashMap<Integer,String>();
HM.put(1001,"LaiShuai");
HM.put(1002,"LaiShuai");
HM.put(1003,"LaiShuai");
Collection<String> Va = HM.values();
Set<Integer> NO = HM.keySet();
for(Integer o : NO){
System.out.println("学号:"+o +" 姓名:"+HM.get(o));
}
ArrayList查询多,增加和删除比较少
LinkedList增加删除比较多,查询比较少
作业:
从控制台中录入学生信息,包含学号、姓名、性别,用集何保存。保存好的跟据学生姓名去查找此学生的所有信息。然后再打印一下所有学生的信息。
import java.awt.*;
import java.util.Map;
import java.util.Scanner;
public class Student {
private Integer ID;
private String name;
private String sex;
static Scanner sc = new Scanner(System.in);
public Student(int id,String name,String sex){
this.ID=id;
this.name=name;
this.sex=sex;
}
public Student(){
}
public void setsNO() {
this.ID = sc.nextInt();
}
public void setName() {
this.name = sc.next();
}
public void setSex() {
this.sex = sc.next();
}
public String getName() {
return name;
}
public int getID() {
return ID;
}
public String getSex() {
return sex;
}
public void ToString(){
System.out.println("学号:"+this.ID +"\t"+" 姓名:"+this.name+"\t"+" 性别:"+ this.sex);
}
public void Found(){
System.out.println("请输入您要找的学生姓名:");
getName();
}
}
import java.util.*;
public class Text {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Map<Integer,Student> st = new HashMap<Integer, Student>();
System.out.println("请录入第"+1+"位同学的学号,姓名,性别");
Student student1= new Student(sc.nextInt(),sc.next(),sc.next());
st.put(student1.getID(),student1);
System.out.println("请录入第"+2+"位同学的学号,姓名,性别");
Student student2= new Student(sc.nextInt(),sc.next(),sc.next());
st.put(student2.getID(),student2);
System.out.println("请录入第"+3+"位同学的学号,姓名,性别");
Student student3= new Student(sc.nextInt(),sc.next(),sc.next());
st.put(student3.getID(),student3);
System.out.println("请录入第"+4+"位同学的学号,姓名,性别");
Student student4= new Student(sc.nextInt(),sc.next(),sc.next());
st.put(student4.getID(),student4);
System.out.println("请录入第"+5+"位同学的学号,姓名,性别");
Student student5= new Student(sc.nextInt(),sc.next(),sc.next());
st.put(student5.getID(),student5);
for(int i=1; i<(st.size()+1); i++){
Student s = st.get(i);
s.ToString();
}
{
System.out.println("请输入您要查找的学生姓名:");
for (int i = 1; i < (st.size() + 1); i++) {
if (st.get(i).equals(sc.next())) ;
st.get(i).ToString();
}
}
}
}
网友评论