【Java】Java中的集合类

摘要:本文讲解了Java入门中的集合类,包括:ListMapSetQueue

  • 集合类的分类

    • List结构集合类:ArrayList LinkedList Vector Stack
    • Map结构集合类: HashMap HashTable
    • Set结构集合类: HashSet TreeSet
    • Queue结构集合类和Queue接口
  • 用法实例

    • ArrayList的使用
    //基本用法
    ArrayList aa1=new ArrayList();
    
    //取大小
    aa1.size();
    //添加对象:
    XS xs1=new Xs("wukong",15,90);
    aa1.add(xs1);
    
    //ArrayList的遍历
    //基本思路:for循环遍历输出
    //用法:将类对象强转换后输出 
    XS show=(XS)
    aa1.get(i);
    show.getName()
    
    //ArrayList的查询及删除
    //删除:
    aa1.remove(i);
    
    //在任意位置插入对象
    aa1.add(i,xs1);
    
    //定义类对象
    class XS
    {
    private String name;
    private double id;
    private int grade;
    
    XS(String name,double id,int grade)
    {
    this.name=name;
    this.id=id;
    this.grade=grade;
    }
    
    public String getName()
    {
      return name;
    }
    public int getGrade()
    {
      return grade;
    }
    public double getId()
    {
      return id;
    }
    }
  • 实例应用

    
    //实例:简单的食品管理系统
    
    //代码:
    
    package cha04;
    
    import java.util.*;
    
    import java.io.*;
    
    public class L4_2 
    
    {
    
    public static void main(String[] args)  throws Exception
    
    {
    
    Mag mag=new Mag();
    
    BufferedReader sc=new BufferedReader(new InputStreamReader(System.in));
    
    while(true)
    
    {
    
    System.out.println("请按提示选择以下功能");
    
    System.out.println("添加食品请按1");
    
    System.out.println("查找食品信息请按2");
    
    System.out.println("修改食品价格请按3");
    
    System.out.println("删除食品请按4");
    
    System.out.println("退出请按0");
    
    String str=sc.readLine();
    
    if(str.equals("1"))
    
    {
    
    System.out.print("请输入食品编号: ");
    
    int num=Integer.parseInt(sc.readLine());
    
    System.out.print("请输入食品名称: ");
    
    String nam=sc.readLine();
    
    System.out.print("请输入食品价格: ");
    
    double pri=Double.parseDouble(sc.readLine());
    
    Sp sp=new Sp(nam,num,pri);
    
    mag.addSp(sp);
    
    }
    
    else if(str.equals("2"))
    
    {
    
    System.out.print("请输入食品编号: ");
    
    int num=Integer.parseInt(sc.readLine());
    
    mag.spxx(num);
    
    }
    
    else if(str.equals("3"))
    
    {
    
    System.out.print("请输入食品编号: ");
    
    int num=Integer.parseInt(sc.readLine());
    
    System.out.println("请输入新的价格: ");
    
    double pr=Double.parseDouble(sc.readLine());
    
    mag.xgjg(num, pr);
    
    }
    
    else if(str.equals("4"))
    
    {
    
    System.out.print("请输入食品编号: ");
    
    int num=Integer.parseInt(sc.readLine());
    
    mag.delsp(num);
    
    }
    
    else if(str.equals("0"))
    
    {
    
    System.out.println("感谢您的使用,再见!");
    
    System.exit(0);
    
    }
    
    else
    
    {
    
    System.out.println("输入有误!");
    
    }
    
    }
    
    }
    
    }
    
    //定义食品类
    
    class Sp
    
    {
    
    private String na;
    
      private int id;
    
      private double pr;
    
      Sp(String na,int id,double pr)
    
      {
    
      this.na=na;
    
      this.id=id;
    
      this.pr=pr;
    
      }
    
      public String getNa()
    
      {return na;}
    
      public void setNa(String nam)
    
      {this.na=nam;}
    
      public int getId()
    
      {return id;}
    
      public void setId(int id)
    
      {this.id=id;}
    
      public double getPr()
    
      {return pr;}
    
      public void setPr(double pr)
    
      {this.pr=pr;}
    
    }
    
    //食品管理类
    
    class Mag
    
    { 
    
    private ArrayList aa=null;
    
    Mag(){aa=new ArrayList();}
    
    public void addSp(Sp sp)
    
    {
    
    aa.add(sp);
    
    System.out.println("添加食品成功!");
    
    }
    
    public void spxx(int id)
    
    {
    
    int i;
    
    for(i=0;i
    
    {
    
    Sp sp=(Sp)aa.get(i);
    
    if(sp.getId()==id)
    
    {
    
    System.out.println("食品信息为:");
    
    System.out.println("Id: "+sp.getId());
    
    System.out.println("Name: "+sp.getNa());
    
    System.out.println("Price: "+sp.getPr());
    
    }
    
    break;
    
    }
    
    if(i==aa.size())
    
    {
    
    System.out.println("输入错误!");
    
    }
    
    }
    
    public void xgjg(int id,double pr)
    
    {
    
    int i;
    
    for(i=0;i
    
    {
    
    Sp sp=(Sp)aa.get(i);
    
    if(sp.getId()==id)
    
    {
    
    sp.setPr(pr);
    
    System.out.println("食品价格修改成功!");
    
    }
    
    break;
    
    }
    
    if(i==aa.size())
    
    {
    
    System.out.println("没有找到相应的食品!");
    
    }
    
    }
    
    public void delsp(int bh)
    
    {
    
    int i;
    
    if(aa.size()==0)
    
    {
    
    System.out.println("对不起,仓库中已没有任何食品!");
    
    }
    
    for(i=0;i
    
    {
    
    Sp sp=(Sp)aa.get(i);
    
    if(sp.getId()==bh)
    
    {
    
    aa.remove(i);
    
    System.out.println("删除食品成功!");
    
    break;
    
    }
    
      }
    
    if((i==aa.size()) && (aa.size()!=0))
    
    {
    
    System.out.println("对不起,没有该食品!");
    
    }
    
    }
    
    }
    • LinkedList使用
    //基本用法
    LinkedList bb=new LinkedList();
    bb.add(sp);
    
    //区别于ArrayList:
    bb.addFirst(sp0);
    bb.addFirst(sp1);
    //sp0先放入,位于最底层
    bb.addLast(sp0);
    bb.addLast(sp1);
    //sp0先放入,但位于最顶层
    //数据压栈,放入有先后顺序之别,先放进后取出;
    //取出时:
    bb.getFirst();//取出第一个
    bb.getLast();//取出最后一个
    • Vector & Stack
    //基本用法
    Vector cc=new Vector();
    //基本同ArrayList
    Stack dd=new Stack();
    //基本同ArrayList
  • Map 应用

    • HashMap的使用
    //基本用法
    HashMap ee=new HashMap();
    ee.put("001",sp1);//001代表键值,键值唯一不可重复,输入采用的是put而非add
    //输出不需遍历,如下:
    if(ee.containsKey("002"))
    {Sp sp=(Sp)ee.get("002");}
    //注:for循环无法对其进行遍历(因为键值为String类型)
    //遍历方法:
    Iterator it=ee.keySet().iterator();
    while(it.hasNext())
    {
        String key=it.next().toString();
        Sp sp=(SP)ee.get(key);
    }
  • 集合类的比较

    • 键值:是为了唯一标识事物而单独添加的属性。一定不要用事物本身的属性来做键值
    • List没有键值 Map有键值
    • ArrayListHashMap都是线程异步的,所以他们的特点是效率高但安全性低
    • VectorHashtable都是线程同步的,所以他们的特点是效率低但是安全性高。
  • 范型和反射机制

    • 解释:由于类型转换的错误,java虚拟机在编译时不会报错,而在运行时报异常,所以存在安全隐患,为此需要引入泛型机制处理

    • 反射机制是将泛型固定的类的所有方法和成员全部可以显示出来,以供程序员确定编写是否有误。

    ArrayList xs=new ArrayList//泛型可将类型固定
    //反射机制
    class BH
    {
    private L l;
    BH(L l)
    {
        this.l=l;
    }
    public void lxmc
    {
        System.out.println(l.getClass().getName()//获取类型名称);
        Method []a=l.getClass().getDeclaredMethods();//获取类中所有方法;
    }
    //主函数:
    BH<类名> bh=new BH<类名>(对象);
    }
原文地址:https://www.cnblogs.com/yczha/p/13160278.html