zoukankan      html  css  js  c++  java
  • 82.Java集合学习之Collections与Arrays

    集合框架中的工具类:特点:该工具类中的方法都是静态的。

    Collections:常见方法:
    1,    对list进行二分查找:
    前提该集合一定要有序。
    int binarySearch(list,key);
    //必须根据元素自然顺序对列表进行升级排序
    //要求list 集合中的元素都是Comparable 的子类。
    int binarySearch(list,key,Comparator);
    2,对list集合进行排序。
    sort(list); 
    //对list进行排序,其实使用的事list容器中的对象的compareTo方法
    sort(list,comaprator);
    //按照指定比较器进行排序
    3,对集合取最大值或者最小值。
    max(Collection)
    max(Collection,comparator)
    min(Collection)
    min(Collection,comparator)
    4,对list集合进行反转。
    reverse(list);
    5,对比较方式进行强行逆转。
    Comparator reverseOrder();
    Comparator reverseOrder(Comparator);
    6,对list集合中的元素进行位置的置换。
    swap(list,x,y);
    7,对list集合进行元素的替换。如果被替换的元素不存在,那么原集合不变。
    replaceAll(list,old,new);
    8,可以将不同步的集合变成同步的集合。
    Set synchronizedSet(Set<T> s)
    Map synchronizedMap(Map<K,V> m)
    List synchronizedList(List<T> list)
    9. 如果想要将集合变数组:
    可以使用Collection 中的toArray 方法。注意:是Collection不是Collections工具类
    传入指定的类型数组即可,该数组的长度最好为集合的size。

    Arrays:用于对数组操作的工具类

    1,二分查找,数组需要有序
    binarySearch(int[])
    binarySearch(double[])
    
    2,数组排序
    sort(int[])
    sort(char[])……
    2,    将数组变成字符串。
     toString(int[])
    3,    复制数组。
     copyOf();
    4,    复制部分数组。
    copyOfRange():
    5,    比较两个数组是否相同。
    equals(int[],int[]);
    6,    将数组变成集合。
    List asList(T[]);
    这样可以通过集合的操作来操作数组中元素,
    但是不可以使用增删方法,add,remove。因为数组长度是固定的,会出现
    UnsupportOperationExcetion。
    可以使用的方法:contains,indexOf。。。
    如果数组中存入的基本数据类型,那么asList会将数组实体作为集合中的元素。
    如果数组中的存入的引用数据类型,那么asList会将数组中的元素作为集合中
    的元素。
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Arrays;
    import java.util.List;
    class Demo1 
    {
        public static void main(String[] args)
        {
            ArrayList<Integer> list = new ArrayList<Integer>();
            list.add(4);
            list.add(3);
            list.add(1);
            list.add(2);
            list.add(3);
            // 排序
            Collections.sort(list);
            // 折半查找的前提是排序好的元素
            System.out.println( Collections.binarySearch( list , 8 ) );  // 找不到返回-插入点-1
            // 反序集合输出
            Collections.reverse( list );
            System.out.println( list );
            // 求最值
            System.out.println( Collections.max( list ) );   // 4
            // fill()  使用指定的元素替换指定集合中的所有元素
            // Collections.fill( list, 5 );
            System.out.println( list );
    
            // 将数组转换为集合
            Integer is[] = new  Integer[]{6,7,8};
            List<Integer> list2 =  Arrays.asList(is);
            list.addAll( list2 );
            System.out.println( list );
    
            // 将List转换为数组
            Object [] ins =  list.toArray();
            System.out.println( Arrays.toString( ins ) );
       
    
        }
    }

    集合的练习

    问题: 定义一个Person数组,将Person数组中的重复对象剔除?

    思路:

    1. 描述一个Person类

    2. 将数组转换为Arrays.asList() List

    3. Set addAll( list )

    4. hashCode()且equals()

    import java.util.Arrays;
    import java.util.Set;
    import java.util.List;
    import java.util.HashSet;
    
    // 1. 描述Person类
    class Person {
        public String name;
        public int age;
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String toString() {
    
            return getClass().getName() + " : name=" + this.name + " age="
                    + this.age;
    
        }
    
        // 4. 重写hashCode和equals()
        public int hashCode() {
    
            return this.age;
        }
    
        public boolean equals(Object o) {
            Person p = null;
            if (o instanceof Person)
                p = (Person) o;
            return this.name.equals(p.name) && (this.age == p.age);
        }
    }
    
    class Demo2 {
        public static void main(String[] args) {
            Person[] ps = new Person[] { new Person("jack", 34),
                    new Person("lucy", 20), new Person("lili", 10),
                    new Person("jack", 34) };
            // 遍历数组
            System.out.println(Arrays.toString(ps));
            // 2. 将自定义对象数组转换为List集合
            List<Person> list = Arrays.asList(ps);
            // 3. 将List转换为Set
            Set<Person> set = new HashSet<Person>();
            set.addAll(list);
            System.out.println(set);
    
        }
    }
    author@nohert
  • 相关阅读:
    【LeetCode OJ】Remove Element
    【LeetCode OJ】Remove Duplicates from Sorted Array
    【LeetCode OJ】Swap Nodes in Pairs
    【LeetCode OJ】Merge Two Sorted Lists
    【LeetCode OJ】Remove Nth Node From End of List
    【LeetCode OJ】Two Sum
    【LeetCode OJ】Majority Element
    最长公共子序列问题
    php fopen与file_get_contents的区别
    PHP 技巧集合
  • 原文地址:https://www.cnblogs.com/gzgBlog/p/13605338.html
Copyright © 2011-2022 走看看