zoukankan      html  css  js  c++  java
  • Java-集合框架(ArrayList,HashSet,HashMap)

    1、为什么需要使用集合框架?
    数组有什么缺点?第1,数组保存的数据数量是有限,而且必须提前确定好;第2,数组只能保存同一个类型的数据
    sun公司才编写集合框架,用来在某些情况下来替代数组的使用
    2、集合框架:就有一些工具类,组成的具有一定功能的体系(框架),集合框架就是用来保存数据


    ArrayList
    企业开发中最为常用的一个集合类
    用来保存多个相同或不同类型的对象,跟数组相似,保存元素有序,也有下标,不同,可以不同类型的数据,而且不需要定义保存数据的个数
    格式:ArrayList 对象名字=new ArrayList();

    import java.util.ArrayList;
    public class Test1 {
        public static void main(String[] args) {
            Emp emp1=new Emp("liu");
            Emp emp2=new Emp("guan");
            Teacher t1=new Teacher("刘老师",99999);
            ArrayList list=new ArrayList();
            //add(obj):往集合中添加元素
            //get(index):index就是ArrayList中的下标,通过下标取得对应的元素,下标值从0开始
            //get方法返回的元素,必须要强制类型转化
            list.add(emp1);//index:0
            list.add(emp2);//index:1
            list.add(t1);//index:2
            Emp emp11=(Emp)list.get(0);
            System.out.println(emp11.name);//结果:liu
            //size():获得集合中元素的个数
            System.out.println(list.size());//结果:3
            //remove(index):根据下标,删除对应的元素
            list.remove(0);
            System.out.println(list.size());//结果:2
            //集合中的元素,最好能重写toString,当直接输出集合名字,可以直接把元素对象信息输出
            System.out.println(list.toString());//结果:[guan, test.Teacher@7852e922]
        }
    }
    class Emp{
        String name;
        Emp(String name){
            this.name=name;
        }
        @Override
        public String toString() {
            return name;
        }
    }
    class Teacher{
        String name;
        double salary;
        Teacher(String name,double salary){
            this.name=name;
            this.salary=salary;
        }
    }

    HashSet
    也是一种集合,该集合保存元素的顺序不确定,随机,HashSet无序,元素不要重复,功能跟ArrayList很相似,企业开发中使用很少

    import java.util.HashSet;
    public class Test1 {
        public static void main(String[] args) {
            HashSet set=new HashSet();
            set.add("快点下课!");
            set.add("快点下课!");
            System.out.println(set);//只输出一个元素的值,不重复。结果:[快点下课!]
            set.add("明天见");
            set.add(new Emp("关之琳"));
            set.add(new Emp("黄飞鸿"));
            set.add(new Teacher("刘",666));
            System.out.println(set);//无序。结果:[关之琳, test.Teacher@70dea4e, 黄飞鸿, 明天见, 快点下课!]
            //使用remove在set中删除元素,该元素类型必须要重写equals和hashcode()
            set.remove("明天见");
            System.out.println(set);//结果:[关之琳, test.Teacher@70dea4e, 黄飞鸿, 快点下课!]
        }
    }
    class Emp{
        String name;
        Emp(String name){
            this.name=name;
        }
        @Override
        public String toString() {
            return name;
        }
    }
    class Teacher{
        String name;
        double salary;
        Teacher(String name,double salary){
            this.name=name;
            this.salary=salary;
        }
    }

    HashMap
    结构特点:一对一对保存数据,key和value要一一对应,一个key对应一个value,而且可以根据key值找到对应value
    1、结构:一一对应(key---value)
    2、特点:每次保存数据,都是一对对保存,把key和value同时一起保存,查询可以根据key找到对应value
    3、HashMap 名字=new HashMap()

    import java.util.HashMap;
    public class Test1 {
        public static void main(String[] args) {
            HashMap map=new HashMap();
            //put(key,value)保存数据
            map.put("k1", new Person("刘"));
            map.put("k2", new Person("张"));
            map.put("k3", "今天阳光好");
            //直接输出map的名字,就map中所有key和value,显示出来
            //map内部就直接调用每个元素toString()方法
            System.out.println("map中所有元素"+map);//结果:map中所有元素{k1=person类的对象的名字是:刘, k2=person类的对象的名字是:张, k3=今天阳光好}
            //get(key):根据key取得对应的value值,取出value是Object类型,需要强制类型转化
            Person p1=(Person)map.get("k2");
            System.out.println(p1);//结果:person类的对象的名字是:张
        }
    }
    class Person{
        String name;
        Person(String name){
            this.name=name;
        }
        @Override
        public String toString() {
            return "person类的对象的名字是:"+name;
        }
    }

    总结:集合中只能用来保存对象,单独的数据没办法直接保存。java引入包装类的概念
    包装类
    java是完全面向对象的,针对8种基本数据类型,单独创建与之对应的8种对象类型(引用类型),基本数据跟引用直接就可以任意的转化,这样的类型我们称为包装类
    1)    包装类提供基本的数据类型跟包装类之间的转化
    2)    包装类分类:
    基本数据类型    包装类
    boolean          Boolean
    char             Character
    byte             Byte
    int               Integer
    short             Short
    long              Long
    float              Float
    double            Double

    public class Test1 {
        public static void main(String[] args) {
            Integer integer1=new Integer(12);
            System.out.println(integer1.toString());//结果:12
            int num1=integer1.intValue();//intValue():把Integer包装类的对象的值取出
            System.out.println("num1="+num1);//结果:num1=12
            //其他包装类的功能跟Integer极其相似
            Double double1=new Double(12.23);
            System.out.println(double1);//结果:12.23
            double num2=double1.doubleValue();
            System.out.println("num2="+num2);//结果:num2=12.23
        }
    }

    自动装箱和自动拆箱
    jdk可以自动把基本数据类型和包装类之间转化
    1)自动装箱:基本类型数据-->包装类对象
    自动拆箱:包装类对象-->基本类型数据

    public class Test1 {
        public static void main(String[] args) {
            int num1=new Integer(12);
    //          基本类型数据<--包装类的对象
    //                                   自动拆箱
            Integer num2=12;
    //            包装类对象<--基本数据类型
    //                                  自动装箱
        }
    }

    2)当把基本类型数据放入集合中的过程,基本数据类型会自动装箱(基本数据类型会自动转化包装类的对象)

    import java.util.HashMap;
    public class Test1 {
        public static void main(String[] args) {
            //把基本类型数据放入集合中,内部把基本类型数据转化包装类的对象,放入集合中
            //好处:可以把基本类型数据放入集合
            //集合中只能放入对象
            HashMap map=new HashMap();
            map.put("k1", new Integer(12));
            map.put("k2", new Double(23.1));
            map.put("k3", 12);//把12放入map集合中,先把12自动装箱new Integer(12),然后把new Integer(12)作为对象放入map集合中
            map.put("k4", 23.1);
            int v1=(Integer)map.get("k1");
            System.out.println("v1="+v1);//结果:v1=12
            int v3=(Integer)map.get("k3");
            System.out.println("v3="+v3);//结果:v3=12
        }
    }

    3)jdk 1.5出现自动装箱和自动拆箱,让我们对集合的操作更加简单,尤其是可以任意把数字放入集合中

  • 相关阅读:
    25- 解决'python -m pip install --upgrade pip' 报错问题
    2018.4.28 基于java的聊天系统(带完善)
    2018.4.27 Java的Swing常用事件
    2018.4.26 Mac安装Redis5.0.3版本服务器
    2018.4.25 设计模式之策略者模式
    2018.4.24 设计模式之桥接模式
    2018.4.23 数据结构
    2018.4.22 深入理解Java的接口和抽象类
    2018.4.21 如何正确快速安装/卸载云服务器Centos7安装GUI图形化界面GNOME桌面环境
    2018.4.20 设计模式之组合模式
  • 原文地址:https://www.cnblogs.com/peiya/p/12693964.html
Copyright © 2011-2022 走看看