疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java集合框架中几种集合的分析


 

        集合可以理解为在内存中存放一组对象的容器,对象是数据的封装,而对象又构成了集合。在java中的集合框架是一种线性的数据结构,但是它分为两种,一种是物理结构,一种是逻辑结构。物理结构是一种连续存储的结构,比如说数组;而逻辑结构可以理解为在内存块中是不连续的,比如说链表,一个链表是分为两中内容的,一个是该链表所存储的数据,还有一个呢,那就是指向下一个链表的指针,通过指针而把表给连起来,称之为链表。数组其实也是可以完成像集合一样的存储的,但是数组存在一定的弊端,数组一旦创建,其大小,类型是固定的,在特定的情况下不能更方便的使用,因此,为了与数组互补,集合也就应运而生了。

  在java.util包中存在三种最重要的集合,其分别是list,set,map,它们各自有各自的特点,这三种都是接口。其中list:1> list的实现类主要有ArrayList,Linkedlist及其Vector,list中存储的数据是有序的,而且也是可以重复的,也就是说list按照添加的顺序,依次的存储在list下标从小到大的位置。做一个简单的代码测试

  public class Test {

  public static void main(String[] args) {

  Test test = new Test();

  test.testList();

  public void testList(){//类

  //创建一个List对象

  List list = new ArrayList();

  list.add(1);

  list.add(1);

  list.add(2);

  for(Object a:list){

  System.out.print(a+" ");

  }

  }

  此段代码的运行结果为:{1 1 2}

  反应了其有序可重复的特点。

  2>set同样是一个接口,它常用的实现类有Hashset,Treeset。set集合的存储特点可以说是和list完全相反的,它是一种无序而且不能重复的存储特点。同样的用代码做一个测试 public class Test {

  public static void main(String[] args) {

  Test test = new Test();

  test.testSet();

  public void testSet(){

  //创建Set对象

  Set set = new HashSet();

  set.add(1);

  set.add(2);

  set.add(5);

  set.add(3);

  set.add(4);

  set.add(1);

  set.add(null);

  System.out.println(set);

  Iterator it = set.iterator();

  while(it.hasNext()){//判断有元素可迭代

  int i = it.next();

  System.out.print(i+" ");

  }

  }

  }

  }

  此段代码的运行结果是:{1 2 3 4 5}

  可以说明其无序不可重复的特点。

  3>最后则是map集合,map的实现类常用的有Hashmap,Hashtable和Treemap。

  map与以上两者稍微的有点不同,它是一种映射关系,在map中,存储两种数据,表达为map,而以上两者都只有一个数据,而且都是通过下标来访问的,map中k是不可以重复的,而v是可以重复的,进行一段代码测试

  public class Test{

  public static void main(String[] args){

  testmap test=new testmap();

  public void testMap(){

  Map map = new HashMap();

  map.put(1, "aaa");

  map.put(2, "bbb");

  map.put(3,"ccc");

  map.put(2, "ddd");

  System.out.println(map);

  //获取key集合(Set)

  Set set = map.keySet();

  Iterator it = set.iterator();

  while(it.hasNext()){

  int key = it.next();

  //通过key获取对应的value值

  String value = map.get(key);

  System.out.println("key="+key+" value="+value);

  }

  }

  }

  }

  此段代码的运行结果是:key=1 value=aaa;key=2 value=ddd;key=3 value=ccc。

  这三种集合各有其所试用的地方,对于像我这种初学者可以让整个代码简化,思路更清晰。

  二:获得各种数据存储方式长度的方法。

  数组:定义一个数组Array[];那么获得该数组长度的方法是使用其length方法。

  字符串: String st = "aaa";

  st.length();

  这里的length是字符串的一种属性,而数组的length是一种方法。

  List:迭代或者直接通过下标输出,list.size()

  set:迭代while(it.hasNext()){//判断有元素可迭代

  int i = it.next();

  System.out.print(i+" ");

  }

  map:只能用迭代的方法,

  //获取key集合(Set)

  Set set = map.keySet();

  Iterator it = set.iterator();

  while(it.hasNext()){

  int key = it.next();

  //通过key获取对应的value值

  String value = map.get(key);

  System.out.println("key="+key+" value="+value);

  }

  map先是通过迭代器先得到key值,因为是一种一一对应的关系,所以用key值就可以得到value值了。