zoukankan      html  css  js  c++  java
  • JAVA集合框架

    一、为什么要使用集合

    单个数据,可以用变量保存;

    多个数据,可以用数组保存;

    但是对于存储多个数据且数量不确定的情况,使用集合;

    二、集合和数组的区别

    (1)数组:
    1、只能保存同一种类型的数据;
    2、数组一旦创建,容量不可改变;
    3、数组可以保存引用类型的数据和基本类型的数据;

    (2)集合:
    1、可以保存不同类型的数据;
    2、集合可根据需要自动扩容;
    3、集合只能保存引用类型的数据;

    那么有个问题,为什么集合能存放引用类型?

    原因:

    集合的存在就是为了方便对多个对象的操作才出现的,存放的是对象的引用,实际内容都在堆上面或者方法区里面,但是基本数据类型是在栈上分配空间的。
    想把基本数据类型存入集合中,直接存就可以了,系统会自动将其装箱成封装类。

    (3)泛型

    Java集合有个缺点,把一个对象丢进集合后,集合会忘记这个对象的数据类型,再次取出时,系统自动把它变成了Object类型。
    为了解决这种问题,泛型出现了。
    Java引入了参数化类型的概念,允许程序在创建集合时指定集合元素的类型,Java的这种参数化类型被称为泛型。如:List<String>表明这个List中只能保存字符串类型的对象。
    需要注意的是,泛型只能是对象,所以如果想保存基本数据类型时,可以使用基本类型的包装类。如List<Integer>等

    三、集合中的层次关系

    (1)Collection接口是集合类的根接口,没有实现类,但是有两个继承的接口,即List和Set。

    特点:Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。

    (2)Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。

    特点:Map不能包含重复的key,但是可以包含相同的value。

    (3)Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:

    1.hasNext()是否还有下一个元素。
    2.next()返回下一个元素。
    3.remove()删除当前元素。

    四、对于List、Set、Map简单应用

    (1)Set

    特点:不可重复

    主要有两个实现类:hashSet和treeSet

    HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。
    TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。

    Set用法:

    1 Set set=new HashSet();
    2 String s1=new String("hello");
    3 String s2=s1;
    4 String s3=new String("world");
    5 set.add(s1);
    6 set.add(s2);
    7 set.add(s3);
    8 System.out.println(set.size());//打印集合中对象的数目为 2

    (2)List

    特点:线性方式存储,可重复

    主要有两个实现类:ArrayList和LinkedList

    ArrayList() : 长度可变数组。可以对元素进行随机的访问,向ArrayList()中插入与与删除元素的速度慢。
    LinkedList(): 链表。插入和删除速度快,访问速度慢。

    List用法:

     1 List list = new ArrayList();
     2 list.add(1);
     3 list.add(2);
     4 list.add(3);
     5 list.add(4);
     6 //1: 用for循环和get()方法
     7 for(int i=0; i<list.size();i++){
     8     System.out.println(list.get(i));
     9 }
    10 //2: 使用 迭代器(Iterator)
    11 Iterator iterator = list.iterator();
    12 while(iterator.hasNext()){
    13     System.out.println(iterator.next());
    14 }

    (3)Map

    特点:键值对,值可以重复

    Map用法:

     1 public class t1 {
     2     public static void main(String[] args)
     3     {   
     4         HashMap hashmap = new HashMap();     
     5         hashmap.put("Item0","Value0");     
     6         hashmap.put("Item1","Value1");     
     7         hashmap.put("Item2","Value2");     
     8         hashmap.put("Item3","Value3");     
     9         Set set = hashmap.entrySet();     
    10         Iterator iterator = set.iterator();     
    11         while(iterator.hasNext())     
    12       {     
    13           Map.Entry mapentry = (Map.Entry)iterator.next();     
    14           System.out.println(mapentry.getKey()+"/"+mapentry.getValue());     
    15       }  
    16         
    17     }
    18 }

    五、关于 ArrayList 与 LinkedList 的比较分析

     ArrayList 底层采用数组实现,LinkedList 底层采用双向链表实现。

    随机访问,arrayList速度快,插入和删除linkedList快

    博客园:http://www.cnblogs.com/zhuziyu/
    Copyright ©2018 不是植物
    【转载文章务必保留出处和署名,谢谢!】
  • 相关阅读:
    c-指针
    iOS 多线程
    iOS 必备技术点
    网络请求
    objective-c基础教程——学习小结
    id类型
    排序算法
    iOS网络
    iOS 绘图
    Python——字符串2.0(实验)(python programming)
  • 原文地址:https://www.cnblogs.com/zhuziyu/p/8503906.html
Copyright © 2011-2022 走看看