zoukankan      html  css  js  c++  java
  • JAVA笔记整理(九),JAVA中的集合

             在工作中,我们经常需要将多个对象集中存放,可以使用数组,但是数组的长度一旦固定之后是不可变的,为了保存数量确定的数据,我们可以使用JAVA中的集合。

             在我看来,JAVA中的集合可以看作是一个特殊的数据库,可以针对这个数据库进行数据的增删查改,可以查看数据库的大小,查看数据库是否为空等等。

             JAVA中的集合是由Collection和Map两个接口派生出来的,正因为是两个接口,所以只能通过其子类来将其实例化,下图为常用集合:

      

      

      Collection是List、Queue和Set接口的父接口,Map是HashMap的父接口。

               正因为是接口,所以实际使用是需要通过其子类将其实例化。

      Collection可以看作是传统意义上的数据库,提供一系列针对数据库的增删查改判断操作

        List  

    public class ListDemo01 {
        public static void main(String[] args) {
            List list = new ArrayList();
    
            // 使用add()向List中添加元素,可见List是可重复的
            list.add("A");
            list.add("B");
            list.add("A");
    
            // 通过循环遍历集合内容
            for (int i = 0; i < list.size(); i++) { // 使用size()方法获得list长度
                System.out.println("第" + (i + 1) + "个元素是: " + list.get(i)); // 使用get(x)来获得list中第x位置的元素
            }
    
            // 使用remove(x)来移除list中第x位的元素
            list.remove(1);
    
            // 通过循环遍历集合内容
            for (int i = 0; i < list.size(); i++) { // 使用size()方法获得list长度
                System.out.println("移除之后,第" + (i + 1) + "个元素是: " + list.get(i)); // 使用get(x)来获得list中第x位置的元素
            }
    
            // 使用isEmpty()来查看集合是否为空,如果返回true则为空,false则不为空
            if (list.isEmpty()) {
                System.out.println("这个集合是空的");
            } else {
                System.out.println("这个集合不是空的");
            }
    
            // 使用addAll将另一个集合添加到集合中
            List list2 = new ArrayList();
            list2.add(123);
            list2.add("D");
            list2.add(123);
    
            list.addAll(list2);
    
            for (int i = 0; i < list.size(); i++) { // 使用size()方法获得list长度
                System.out
                        .println("移除之后,又添加后,第" + (i + 1) + "个元素是: " + list.get(i)); // 使用get(x)来获得list中第x位置的元素
            }
    
            // 使用contains(x)方法来判断集合中是否存在x元素
            if (list.contains("Z")) {
                System.out.println("集合中存在这个元素");
            } else {
                System.out.println("集合中不存在这个元素");
            }
    
            // 使用containsAll(x)方法来判断集合中是否包含某个集合
            List list3 = new ArrayList();
            list3.add("A");
            list3.add("B");
    
            if (list.containsAll(list3)) {
                System.out.println("list中包含list3");
            } else {
                System.out.println("list中不包含list3");
            }
    
            // 使用indexOf(x)来获取x元素在集合中的位置,如果存在该元素,则返回该元素首次出现的位置,如果不存在,则返回-1
            System.out.println("123在list2中出现的位置为: " + list2.indexOf(123));
            System.out.println("123在list2中出现的位置为: " + list2.indexOf(456));
            
            // 使用indexOf(x)来获取最后一个x元素在集合中的位置,如果存在该元素,则返回该元素最后出现的位置,如果不存在,则返回-1
            System.out.println("123在list2中最后一次出现的位置为: " + list2.lastIndexOf(123));
            System.out.println("123在list2中最后一次出现的位置为: " + list2.lastIndexOf(456));
            
            //使用set(x,y)来讲list中第x个元素替换为y
            list2.set(2, 456);
            for (int i = 0; i < list2.size(); i++) {
                System.out.println("替换之后,list的第" + (i+1) + "个元素为: " + list2.get(i));
            }
        
         System.out.println(list2);
    } }

       

             所有的Collection的实现类都重写了toString()方法,并且ArrayList是以“动态数组”的形式来存储数据的,当使用System.out.println()来直接输出List的话,会输出[xx,yy,zz]的形式

    set

             HashSet是Set的实现类,它就好像一个箱子,我们可以往这个箱子里放若干个对象,但是我们却无法获取到箱子里面对象的顺序,也不能放相同的对象

             HashSet和ArrayList提供的方法基本相同,只是HashSet中不允许添加重复的对象,如果使用add()添加重复对象,则会返回false,并且新添加的元素不会被添加。

             当向一个HashSet添加一个元素的时候,HashSet会调用该对的hashCode()方法来获取到这个对象的hashCode值,然后集合中存在相同hashCode的对象,则添加不成功。

    public class SetDemo02 {
        public static void main(String[] args) {
            Set set = new HashSet();
    
            //通过add(x)方法来讲x元素添加到set中
            set.add("A");
            set.add(1234);
            set.add(1234);
            
            //使用set的iterator()方法获取到set的迭代期,再通过迭代期的next()方法获取到set中的值
            //通过输出结果可以看到上面添加的1234其实只添加成功一个
            Iterator iterator = set.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());            
            }
            
            Set set2 = new HashSet();
            set2.add("B");
            set2.add("C");
            set2.add("D");
            
            //通过addAll()方法来将一个set集合添加到另一个中
            set.addAll(set2);
            
            iterator = set.iterator();
            System.out.println("添加进一个集合之后,集合中的元素有");
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
            
            //通过contains()方法来判断集合中是否包含某个元素
            if (set.contains("A")) {
                System.out.println("这个集合中包含A元素");
            }else {
                System.out.println("这个集合中不包含A元素");
            }
            
            //使用remove(x)来移除集合中的x元素,如果存在并移除,则返回true,否则返回false
            if (set.remove("A")) {
                System.out.println("集合中存在A元素,并且已经移除");
            }else {
                System.out.println("集合中不存在A元素");
            }
        }
    }

    Map

             JAVA提供了一种以<键,值>形式存储的集合---Map,你可以通过“键”查找“值”。一个 Map 中不能包含相同的 key ,每个 key 只能映射一个 value 。

             Map是一个接口,他提供了HashMap, HashtableLinkedHashMap等子类,实际中常用HashMap。

             Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。

    public class MapDemo01 {
        public static void main(String[] args) {
            Map<String, String> map = new HashMap<String, String>();
            //使用put(x,y)来添加键值对
            map.put("key1", "value1");
            map.put("key2", "value2");
            map.put("key3", "value3");
            map.put("key4", "value4");
            map.put("key5", "value5");
            map.put("key6", "value6");
    
            //通过get(x)来获取key为x的值
            String str = map.get("key1");
            System.out.println(str);
    
            //使用containsKey(x)来判断是否存在key为x的键值对
            if (map.containsKey("key3")) {
                System.out.println("key值为key3的集合存在");
            } else {
                System.out.println("key值为key3的集合不存在");
            }
    
            //使用containsValue(x)来判断是否存在Value为x的键值对
            if (map.containsValue("key3")) {
                System.out.println("value值为key3的集合存在");
            } else {
                System.out.println("value值为key3的集合不存在");
            }
    
            //使用keySet()来获取map中所有键,返回一个Set集合
            Set<String> set = map.keySet();
            Iterator<String> iterator = set.iterator();
            while (iterator.hasNext()) {
                String s = iterator.next();
                System.out.println("key:" + s + "----value:" + map.get(s));
            }
            
            //使用values()来获取map中所有值,返回一个Collection
            Collection<String> c = map.values();
            Iterator iterator2 = c.iterator();
            while (iterator2.hasNext()) {
                System.out.println(iterator2.next());
            }
            
            //使用remove(x)来移除key为x的键值对
            map.remove("key3");
            System.out.println("移除之后,map中剩余的键值对");
            Collection<String> c2 = map.values();
            Iterator iterator3 = c2.iterator();
            while (iterator3.hasNext()) {
                System.out.println(iterator3.next());
            }
            
        }
    }

      

      

  • 相关阅读:
    Zookeeper 源码(七)请求处理
    Zookeeper 源码(六)Leader-Follower-Observer
    Zookeeper 源码(五)Leader 选举
    Zookeeper 源码(四)Zookeeper 服务端源码
    Zookeeper 源码(三)Zookeeper 客户端源码
    Zookeeper 源码(二)序列化组件 Jute
    Zookeeper 目录
    分布式理论系列(三)ZAB 协议
    分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab
    分布式理论系列(一)从 ACID 到 CAP 到 BASE
  • 原文地址:https://www.cnblogs.com/xs104/p/4598950.html
Copyright © 2011-2022 走看看