• Collection集合学习(一)———Set接口与具体实现


    接口Collection:

         Collection是Java的一个集合框架, 也是一个根接口。JDK中没有提供此接口的任何实现,但是提供了更具体的子接口Set和List接口的实现,所有的Collection实现类都是通过这些子接口间接实现了Collection。

         Collection接口有两种构造方法,一种用于构造空的Collection,另一种是带有Collection类型单参数的构造方法。该接口常用的方法包括add(E e),addAll(Collection<?> e),clear(),contains(Object o),equals(Object o),isEmpty(),remove(Object o),size(),toArray(),iterator()等等。

         常用子接口包括List,Set,Queue等。

    一.Set接口:

        一个不包含重复元素的Collection,并且最多包含一个null元素,Set中的元素是自动排序的,与添加顺序无关。

        具体实现类包括TreeSet,HashSet,EnumSet,均不是线程安全的。

        1.常用实现类HashSet和TreeSet

            区别如下:

            1)HashSet底层是通过哈希表实现的,而TreeSet是通过二叉树实现的。

            2)TreeSet类是使用元素的自然顺序对元素进行排序,且同一个TreeSet内的元素类型必须一致 ; 如果TreeSet内的元素是类对象,则该类必需实现Comparable接口为该类定制排序方式并且具有toString方法,如下面代码所示。

                  HashSet根据哈希值来对元素进行排序。

            3)HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的 ;具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复,但是同一个类的对象可以放入不同的实例 。

            4)HashSet的性能比Treeset好,因为TreeSet需要额外的红黑树算法来维护集合元素的次序,只有当需要一个保持排序的Set时,才会用TreeSet。

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    import java.util.TreeSet;
    
    public class Collection_try {
        
        public static void main(String[] args){
            
            Set set=new HashSet();
            set.add("2");
            set.add("1");
            set.add("3");
            set.add("4");
            Iterator i=set.iterator();
            while(i.hasNext()){
                System.out.println(i.next());
            }
            
            System.out.println("-------------------------");
            
            A a1=new A(11);
            A a2=new A(12);
            A a3=new A(13);
            A a4=new A(10);
            TreeSet set1=new TreeSet();
            set1.add(a1);
            set1.add(a2);
            set1.add(a3);
            set1.add(a4);
            
            Iterator i1=set1.iterator();
            while(i1.hasNext()){
                System.out.println(i1.next());
            }
            System.out.println(set1.size());
        }
    
    }
    
    
    class A implements Comparable{
        
        private int i;
        
        public int getI() {
            return i;
        }
    
        public void setI(int i) {
            this.i = i;
        }
    
        public A(int i){
            this.i=i;
        }
        
         public int compareTo(Object o)                 //写具体的比较方法
         {
                 A s=(A)o;
                 if(s.getI()<this.i){
                     return 1;
                 }else{
                     return -1;
                 }
         }
         
         public String toString(){
             return i+":ok";
         }
    }

            2.EnumSet

            EnumSet 是一个与枚举类型一起使用的专用 Set 实现,Enumset中所有元素都必须来自单个Enum枚举类型(即必须是同类型,且该类型是Enum的子类),EnumSet的特点是速度方面要优与HashSet和TreeSet 。

            如下代码为一个Enum和EnumSet的例子

    package mars;
    
    import java.util.EnumSet;
    
    /**
     * Created by zhangys on 17-7-21.
     */
    public class Collection_EnumSet {
    
        public static void main(String [] args){
            testTraversalEnum (); //枚举类型的遍历
            testEnumSet();  //EnumSet的是一个哦你
        }
    
        public static void testTraversalEnum (){
            Color[] allColor = Color.values ();
            for (Color color : allColor) {
                System. out .println( " 当前颜色 name : " + color.name());
                System. out .println( " 当前颜色 ordinal : " + color.ordinal());
                System. out .println( " 当前颜色 value: " + color);
            }
        }
    
        private static void testEnumSet() {
            EnumSet<Color> currEnumSet = EnumSet.allOf(Color.class);
            for (Color aLightSetElement : currEnumSet) {
                System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);
            }
            System.out.println("--------------华丽丽的分割线---------------");
            EnumSet<Color> arEnumSet = EnumSet.of(Color.RED,Color.BLACK,Color.BLUE);
            for (Color aLightSetElement : arEnumSet) {
                System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);
            }
        }
    
        public enum Color{
    
            RED(1),BLUE(2),BLACK(3),YELLOW(4),GREEN(5);
    
            int node;
    
            private Color(int node){  //构造方法,只能为私有
                this.node = node;
            }
    
            public String toString() {
                return String.valueOf (node);
            }
        }
    }
  • 相关阅读:
    SqlServer与Access之间的数据互导
    [转]半角<=>全角互转函数[JS版 VBS版]
    [文摘20070914]一个成功的博客必须知道的80个博客工具
    在javascript中获得由Ajax返回DataTable的列数和列名
    [转]获取xml节点值和属性值(兼容ie和firefox)
    [文摘20070920]网络战
    游标简单使用
    sql函数 得到 由 年月日时分秒+三位内的随机数 组成的随机数
    [转]ASP.NET 2.0 AJAX中Webservice调用方法示例 (包含参数类型为DataTable的WS方法)
    向页面中添加音乐或flash
  • 原文地址:https://www.cnblogs.com/z-belief/p/5618934.html
Copyright © 2020-2023  润新知