浅谈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);      }     }

  

  

时间: 2024-08-13 07:58:10

浅谈java集合的相关文章

浅谈JAVA集合框架

??Collection Collection下有俩个子类,分别为List和Set.List是有序的,且元素可重复.Set是无序的,且元素不可重复.这里说一下有序与无序的概念,即存入的顺序与取出的顺序是否一致,若一致,则为有序,否则为无序. List? List下有俩个子类分别为?ArrayList和linkedList.ArrayList查询快,插入慢.LinkedList查询慢,插入快.我们通常会考虑使用LinkedList,因为集合操作中查询是比更新普遍要多的,而在你无法抉择使用哪个时,选

浅谈JAVA集合框架(转载)_常用的Vector和HashMap

原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes).集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题. 1 Collection 和 Collections的区别. 2 List, Set, Map是否继承自

浅谈Java中的hashcode方法 - 海 子

浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程

浅谈java类集框架和数据结构(2)

继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主要有最重要的三种实现:ArrayList,Vector,LinkedList,三种List均来自AbstracList的实现,而AbstracList直接实现了List接口,并拓展自AbstractCollection. 在三种实现中,ArrayList和Vector使用了数组实现,可以认为这两个是

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用

浅谈JAVA中的“hashcode()”方法

浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 一.hashCode方法的作用 对于包含容器类型的程

!! 浅谈Java学习方法和后期面试技巧

浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要的,比如循环系列.For,while,do-while.这方面只要大家用心点基本没什么难点. 二.面向对象:oop面向对象的时候,偏重理论,相信这方面的文章也很多,大家可以多看看,在这就不说了.重点掌握面向对象的三大特征和基本原理. 三.java核心一:这方面主要偏重API,所以在学习了这章的时候,

浅谈Java中的Set、List、Map的区别(1)

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用

浅谈Java接口(Interface)

浅谈Java接口 先不谈接口,不妨设想一个问题? 如果你写了个Animal类,有许多类继承了他,包括Hippo(河马), Dog, Wolf, Cat, Tiger这几个类.你把这几个类拿给别人用,但是别人想给动物加上宠物功能,要怎么办呢? 根据以往的知识,我们可以: 把Pet方法加入Animal类 这样所有的子类都有Pet方法,以后新继承Animal的动物也有这个方法. 这个方案很简单,但是这个方案也很操蛋.为什么? 有人会养河马吗?有人会养狼养狮子吗?不太行. 如果都是Pet方法,狗需要遛,