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
  • 相关阅读:
    Android JNI和NDK学习(04)--NDK调试方法(转)
    Android JNI和NDK学习(03)--动态方式实现JNI(转)
    Android JNI和NDK学习(02)--静态方式实现JNI(转)
    Android JNI和NDK学习(01)--搭建NDK开发环境(转)
    C++语言基础(7)-inline内联函数
    C++语言基础(6)-const 关键字
    C++语言基础(5)-this和static关键字
    红黑树:个人理解与Python实现
    最小堆实现优先队列:Python实现
    二叉查找树:Python实现
  • 原文地址:https://www.cnblogs.com/gzgBlog/p/13605338.html
Copyright © 2011-2022 走看看