集合

 集合对元素的类型没有限制,且没有上限【容器】每个容器对数据的存储方式不同,即数据结构。以下为共性方法:              

   存储: add, addAll

   删除:clear,remove,removeall

    取值内部类Interator

        在集合(容器)内部定义内部类Interator(用于定义具体的取出方式),若放在外部,不利于封装。同时,向外提供方访问方法(interator)。同时,将共性的判断抽出,那么每一个实现集合功能的均可以使用这个方法。

    

    String keyset = map.keyset();    //获得Iterator内部类对象,Iterator()返回Iterator的对象,其中,it指向集合的第一个元素
        Iterator<string>  it  = keyset.Iterator()  
        While( it.HashNest()){                   //hasNext()    如果仍有元素可以迭代,则返回 true。

System.out.println(“key:”+it.next()+”value:”map.get(it.next()));
}
/***内存优化写法

  For(Iterator<string>  it =new interator()<string>;it.HashNest();)      

     System.out.println(“key:”+it.next() +”value:”map.get(it.next()));         // next()
          返回迭代的下一个元素。 
*/    

1)   List集合  :有索引,有序【存入取出一致】,可重复。                        

           List由于有角标,可进行多种操作。Collection的literator,只有hasNext(),next(),remove()【删除引用】;若直接用集合操作,会造成并发问题。List通过 ListIterator,提供了修改的功能。

             ListIterator<string>  it  = keyset.listIterator(int index) //返回列表中元素的列表迭代器(以正确的顺序),从列表的指定位置开始。

            三种list类型比较:                 
                  (1)Arraylist:  底层使用数组结构

                               角标按序排列,不断刷新。查询速度快,增删速度慢。线程不同步。默认数组长度是10,超过时,new一个新数组,默认延伸50%.

                 (2)Vector:数组数据结构

                              线程同步,被Arrraylist取代。默认延伸50%。枚举(Enumoration接口)

                             这种特有方法取出方式。与Interator方法相同。

               (3)Linkedlist:  底层使用双链表结构

                               查询速度慢,增删速度快。一般元素特变多时使用。

                                特有方法:

                                 addfirst,addlast;  getfirst,getlast;  removefirst,removelast

2)   Set集合   :数据无序【存入取出不一致】,不可重复。功能与set集合一致。

                     (1) Hashset:

                                                        hashcode();         equals();                                                 

            数据结构是哈希表【按哈希值来存】,线程非同步,元素唯一性判断依据是:元素哈希值是否唯一,然后还要判断equals是否为真。以默认Hash值存储时,会生成两个对象。同时,会生成对应的散列码,当需要比较两个对象时,java先比较他们的hashCode,若不同,则两个对象就不同,若相同,再比较equals()方法,判断是否相同,equals()系统默认是比较地址。


                      (2) Treeset                         

          以默认的自然顺序进行存储。(二叉树的数据结构进行底层存储)

         compareTo实现此接口的对象列表(和数组)可以通过Collections.sort(or  Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。返回值正数,0,负数,,,分别代表指定对象大于,等于,小于本对象。

方式一、集合元素具有可比较性(元素实现compareable接口,以覆盖compareTo方法)

         compareTo(T o)
          比较此对象与指定对象的顺序。

               封装性不好,这里不再举例。

方法二:元素不具有可比较性,用比较器进行比较。实现Comparato接口,覆盖compare方法class treeset implements Comparator {

    @Override
    public int compare(Object obj1, Object obj2) {
        // TODO Auto-generated method stub

        if (!((obj1 instanceof Person) && (obj2 instanceof Person))) {
            throw new RuntimeException("Funk you");
        } else {
            Person person1 = (Person) obj1;
            Person person2 = (Person) obj2;
            if (person1.getName() == person2.getName()) {
                if (person1.getAge() == person2.getAge()) {
                    return 1;
                }
            }
            return 0;
        }
    }
}





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值