个人日记:集合

数组特点:必须指明数据类型、数组长度
学生成绩管理:保存30个学生成绩,是学生成绩:int 
数组的局限性在于限制了长度,无法满足业务的需求,所以引用集合
集合:
Collection:List:
                 ArrayList//import
                 LinkedList//import
            Set:
                 HashSet//import
                 TreeSet
Map:HashMap//import
     TreeMap

Collection:建立集合的语法都相同,都如同
例:
对应接口  数据类型(对应类)  变量名 new 对应接口;
ArrayList<String> some=new ArrayList<>();

使用Iterator的语法也都一致:
方法也一致

size() :返回列表中的元素数。类似于length
add(E e)  在列表的尾部增加元素,括号里直接输入对应数据类型,即创建集合时<>中使用的数据类型
add(int index,E e) 在列表的指定位置插入指定元素(可选操作)。
addAll(int index,Collection<?> c) 将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
set(int index,E e)  用指定元素替换列表中指定位置的元素(可选操作)。
remove(int index,E e) 删除指定位置的元素
get(int index)  返回(得到)列表中指定位置的元素,  
contains():判断指定值是否存在,存在返回true,不存在返回false
containsALL(Collection<?> c)  如果列表包含指定 collection 的所有元素,则返回 true。即该集合包含着指定集合的所有元素,返回true       
clear();从列表中移除所有元素(可选操作)。清除集合所有元素。

List
ArrayList和LinkedList的不同在于,前者在new时,即建立堆时是以一整块出现的,可以类想于一整块正方体来保存数据,所以查找起来相对方便,但是如果需要删除某个元素的话,需要遍历寻找,通过索引去删除指定元素。后者在new时,每个元素都是独立的小正方体,分为两块,一块保存该元素内容,另一块保存下一元素的地址,所以删除某个元素只要使用对应的方法就可以直接删除,并不需要遍历,但是查找起来相对于遍历就十分的繁琐。
ArrayList:底层是一个数组,擅长数据的查找(访问)
例:
对应接口  数据类型(对应类)  变量名 new 对应接口;
ArrayList<String> some=new ArrayList<>();

LinkedList:底层链表,擅长数据的修改(包括数据添加和删除)
语法同理ArrayList


特点:存储的数据时有序的(有序是指存储顺序),存放重复的数据,可以存放NULL值


Iterator
迭代器:作用与foreach和for遍历数组相同:
ListIterator:迭代器。支持前进和后退两种读取方式。
支持ArrayList和LinkedList两个集合
集合名.listIterator();//表示从第一个元素的上面开始访问
集合名.listIterator(int index);//表示从指定下标的位置的上面开始访问
hasPrevious():判断是否有上一个元素可以访问
Previous():获取上一个元素。

Listiterator.Set():修改
Listiterator.add():添加
Listiterator.remove():删除

语法:
ListIterator<Student> iterator = c1students.listIterator();//先利用集合名.listIterator;再使用alt+enter进行填充。
while (iterator.hasNext()){                                //使用while循环,但iterator.hasNext()为真时进行遍历
 Student next = iterator.next();                           //iterator.next;在使用alt+enter进行自动填充
         System.out.println(next);                          //输出该元素的内容
     }

set:
特点:存储无序(不再支持索引),不能存储重复数据,但可以是NULL//即如果同时输入了两个相同的元素,set集合将不会保存后面那个相同的元素。
和list 不同,他是无序的,所以在后面不能被hashmap.sort所排序
Set集合:HashSet,通常用来输出数据的方案:Iterator实现数据的删除和遍历
SET中不能出现重复数据:存放到Set集合的数据,不能满足元素1==元素2或元素1.equals(元素2),set集合将只保存元素1,而不会存储元素2

语法:
语法与List的语法相同,使用Iterator遍历的语法也相同。

Tips
存储无序,不能使用下标取值。不能存储重复元素,故一个set有且仅有一个NULL值

Map:
K:指的是key,即键对方法中的键,他对应的是对象中的某一属性,用来实现根据集合内元素的某一属性值来筛选某一元素,即,如果我想通过一个员工的工号来找到指定员工的全部信息,那么key所对应就是这个属性就是工号。
如果我想使用以前的方法,建立相关类,使用if判断,equals来对比,在遍历中进行,可以输出对应的同学的全部信息。
      Employee employee = new Employee("001", "孔姐姐", "人事");//建立对应类的有参构造方法,并且建立对象元素

        Employee employee1 = new Employee("003", "董列涛", "总监");
        Employee employee2 = new Employee("004", "王尼玛", "逗b");

        ArrayList<Employee> employees = new ArrayList<>();
        employees.add(employee);
        employees.add(employee1);
        employees.add(employee2);
        //需求: 查询员工编号为004的员工详细信息
        Iterator<Employee> iterator = employees.iterator();
        while (iterator.hasNext()) {
            Employee next = iterator.next();
            if ("004".equals(next.getId())) {
                System.out.println(next);
                break;
            }
        }
V:即value,即键对方法中的对,对象。他对应的是集合里的某一对象。
方法1
例如我建立了一个 Employee 即员工类,并且封装了id即工号,和姓名两个属性。也对应的使用了tostring方法
Employee employee = new Employee("001", "孔姐姐", "人事");//建立三个对象,即集合元素
Employee employee1 = new Employee("003", "董列涛", "总监");
Employee employee2 = new Employee("004", "王尼玛", "逗b");

//语法  工号的数据类型,对象类型 变量名 new  语法
HashMap<String, Employee> employeeHashMap = new HashMap<>();
        employeeHashMap.put(employee.getId(), employee);// 这里获得ID,利用建立属性的方法可以,但是也可以单独赋给他一个值,这样想要打印值集的时候就不会打印出                                                           键集,比如我这里对应的是001,那么我直接在这里使用"001","002","004",并且删掉在员工类里定义的id属                                                            性,下面的代码仍不变,那么值集输出的键集仍然不变,但是值集就没有id这个属性的输出了。
        employeeHashMap.put(employee1.getId(), employee1);
        employeeHashMap.put(employee2.getId(), employee2);
hashmap的get方法,得到工号为004的员工的所有信息,004是工号,对应的类型创建hashmap是规定的数据类型所限制。
 Employee employee3 = employeeHashMap.get("004");
        System.out.println("员工编号004的员工信息:"+employee3);
拓展1:判断
  //判断集合中是否存在 工号为002的员工
                                                                        
        boolean b=   employeeHashMap.containsValue(employee);//判断集合中是否存在 employee的员工,值只有true和false;

/* boolean b = employeeHashMap.containsKey("002");  判断集合中是否存在Key值为002即工号为002的员工存在
  */                                                                       
        if (b){
            System.out.println("存在");
        }else{
            System.out.println("不存在");
        }
拓展2:
 //遍历
        Set<String> strings = employeeHashMap.keySet();//map集合的数据输出:使用Values()和Entryset()都可以
        Iterator<String> iterator1 = strings.iterator();
        while (iterator1.hasNext()){
            String next = iterator1.next();
            System.out.println(next);
        }


Map<K,V>:存储数据是以键值对的形式存储
HashMap: 键不能重复
put(Object key,Object value),//括号中,前者为业务需求的通过制定某一属性的值来寻找对应元素,后者属性所对应的对象。
get(Object key);//得到括号中属性的值对应的对象全部信息。
remove(Object key);//删除括号中属性的值对应的对象的全部信息。
map集合的数据输出:
1、keyset()  key==>value//键值信息组成的集合
2、Values()//值集信息组成的集合
3、Entryset()//所有与键对相关的信息组成的元素组成的集合
4.hasnext()//判断输入的元素是否为空值,不为空输出true。
5.直接输出集合名,就直接打印出键值对集的信息,但必须调用了tostring方法。

Collections
Arrays:操作数组。排序、查找
Collections:操作集合。排序、查找
BinarySearch()  必须基于排序。
sort 从小到大排序
reverse 从大到小排序


  ArrayList<String> data = new ArrayList<>();
        data.add("zhangsan");
        data.add("we");
        data.add("kevin");
        data.add("richard");
        data.add("linda");
        data.add("alice");

        Collections.sort(data);//按照从小到大的顺序排序

        for (String string:data){//循环输出集合
            System.out.print(string+"\t");
        }

        System.out.println(Collections.max(data));//由于该集合是按照首字母的顺序排序,所以输出该集合字母顺序最靠后的元素
        System.out.println(Collections.min(data));//输出该集合字母顺序最靠前的元素

      //在集合中查找指定的元素 存在返回 索引 不存在 返回 负数
        int w = Collections.binarySearch(data, "we");//we为某一属性的值
        System.out.println(w);//如果存在,就输出对应的索引值,如果不存在输出一个负数

     
        System.out.println();
        //  反转指定列表中元素的顺序
        Collections.reverse(data);//reverse和sort相反
        for (String string:data){
            System.out.print(string+"\t");//遍历
        }


总结:
1、Map集合===》key==>value,支持三种数据获取方式,keyset() values() Entryset()
2、ListIterator   properties//后者没学
3、泛型:语法 集合<数据类型> 集合名=new 集合<>(); 优势:保证数据类型安全
4、Collections常用的方法Sort  max   min  reverse()   binarysearch()


嵌套:
在集合嵌套中,注意第一次迭代的出的next是集合,而不是对象,所以还需要在使用一次迭代器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值