zoukankan      html  css  js  c++  java
  • 浅谈java集合

      

    1、集合的分类(都位于java.util包下)

     1)collection是集合的父类接口(map集合除外),set和list集合都是继承自他;

    1> list接口

         1)他的实现类有Arraylist、Vector和LinkedList三种;

       Arraylist: 实现了长度可变的数组,在随机查找和遍历时效率比较高;往集合中添加元素是用add()方法;并且它是线程非同步的,ArrayList 增长当前长度的50%,插入删除效率低;

      LinkedList:采用链表存储方式,在插入、删除元素时比较方便;并且其中允许null值得存在;《list.add(null);》

      Vector: 他和Arraylist非常相似,唯一区别是他是线程安全的,即线程同步;每次增加原来长度的一倍;

    2〉Set接口

      1)它的实现类有Hashset和ThreeSet;

      hashset:集合中元素无序,唯一,可以存放null值;线程非同步的;当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。简单的说,hashset集合存放元素是通过equals()方法比较相等,并且hashcode()的返回值也相等;如果要把一个对象放入集合中,重写该对象对应类的equals(),也应该重写其hashcode(),其规则是如果两个对象的equals比较返回值true,其hashcode值也应该相等;另外,对象中用来比较equals的属性也应该用来比叫hashcode值;

      threeSet:集合中元素有序,TreeSet是SortedSet接口的唯一实现类,他的两种排序方式为自然排序和定制排序;其中自然排序为默认的排序方式,定制排序需要实现comparable接口;

      这两种集合都需要通过迭代器来方问,因为他们都没有get();

    2)Map集合的实现类hashmap、HashTable、TreeMap

    1〉 Map集合是通过键——值对的方式来存放元素的;根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,但是他的只可以有多个null,不支持线程同步。

    2〉 HashMap和hashTable区别:

      hashmap的元素可以为空,线程非安全的,hashtable的元素不可以为空,是线程安全的;

      Hashtable 比 HashMap 慢,因为它是同步的

      HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。

      TreeMap的内部结构是一棵红黑树(又叫排序数,是二叉树的一种),使用链式存储,可以指定比较器Comparator,key需实现Comparable接口。key不能为null。存结点性能稍差,因为需要调整树结构;取结点用的是链表遍历,但是属于有序比较,性能中等。迭代遍历时用的树的中序遍历,是一个有序序列。适用于有排序需求的情况。

      3)迭代器(算法)

        一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或ListIterator接口。

    1〉遍历Arraylist集合

      List<String> list=new ArrayList<String>();
         list.add("Hello");
         list.add("World");
         list.add("HAHAHAHA");
         //第一种遍历方法使用foreach遍历List
         for (String str : list) {            //也可以改写for(int i=0;i<list.size();i++)这种形式
            System.out.println(str);
    
       //第二种方法,把链表变为数组相关内容进行遍历
      String [] s=new String[list.size()]
      list.toArray(s);
      for(int i=0,i<s.length,i++){
      system.out.print(s[i]);
    }
      //第三种,使用迭代器进行遍历
      Iterator is=list.itrrator();
      while(is.haNext){
       system.out.print(is.next()) 

    }

    2> 遍历Map集合

     Map<String, String> map = new HashMap<String, String>();
          map.put("1", "value1");
          map.put("2", "value2");
          map.put("3", "value3");
       //第一种:普遍使用,二次取值
          System.out.println("通过Map.keySet遍历key和value:");
          for (String key : map.keySet()) {
           System.out.println("key= "+ key + " and value= " + map.get(key));
          }
        //第二种
          System.out.println("通过Map.entrySet使用iterator遍历key和value:");
            for(Entry<String,String> item: map.entrySet()){
         system.out.print(item.getKey()+"-"+item.getValue())
    }
       //第三种
          System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
          for (String v : map.values()) {
           System.out.println("value= " + v);
          }
         }


      

      

  • 相关阅读:
    Ajax学习网址收集
    Crystal Report Download URL and SN
    svn eclipse unable to load default svn client的解决办法
    Effective C++:条款08:别让异常逃离析构函数 (Prevent exceptions from leaving destructors.)
    Effective C++:条款07:为多态基类声明virtual析构函数 (Declare destructors virtual in polymorphic base classes.)
    Effective C++:条款06:若不想使用编译器自动生成的函数,就该明确拒绝 (Explicitly disallow the use of compliergenerated functions you do not want.)
    #define高级教程
    Effective C++:条款04:确定对象被使用前已先被初始化 (Make sure that objects are initialized before they're used.)
    Effective C++:条款05:了解C++默默编写并调用哪些函数 (Know what functions C++ silently writes and calls.)
    Linq 调用存储过程(转)
  • 原文地址:https://www.cnblogs.com/cn-930621/p/6849131.html
Copyright © 2011-2022 走看看