Java集合

原创 2015年07月08日 14:00:29
1、 Java集合简介
       面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储。集合则是用于存储对象的,也只能存储对象,不能存基本数据类型,集合的长度是可变的,并可以存储不同类型的对象。
       Java提供了一个全新的集合框架,主要由一组用来操作对象的接口组成:
           Collection接口:一组允许重复的对象。
           Set接口继承Collection,但不允许重复,使用自己内部的一个排列机制(即元素是无序的,无序是指元素存入和取出的顺序不一定是一致的)。
           List接口继承Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。
           Map接口是一组成对的key-value对象,Map中不能有重复的key,但可以有重复的value,也是无序的。
       下面是一张我从网上找的集合框架图,可以更好的帮助我们了解集合框架。


2、 Collection接口
       用于表示任何对象或元素组,是List和Set接口的父接口。AbstractCollection是其一个抽象类。
       Collection接口的iterator()方法返回一个Iterator。Iterator接口方法能以迭代方式逐个访问集合中各个元素,Iterator要依赖Collection或其实现类。
       补充
       Iterator下有三个方法:
           (1)boolean hasNext():判断是否存在另一个可访问的元素。
           (2)Object next():返回要访问的下一个元素。如果到达集合结尾,则抛出NoSuchElementExcption异常。
           (3)void remove():删除上次访问返回的对象。本方法必须紧跟在一个元素的访问后执行,如果上次访问后集合已被修改,方法将抛出IllegalStateException异常。Iterator中删除操作对底层Collection也有影响。
       当另一个线程修改底层集合的时候,如果正在用Iterator遍历集合,那么Iterator会抛出ConcurrentModificationException异常并立刻失败。
3、 List接口
       List接口继承了Collection接口,从而用来定义一个允许重复项的有序集合,该接口不但能够对列表的一部分进行处理,还添加了对索引的操作。
       (1)AbstractList和AbstractSequentialList抽象类
                AbstractList和AbstractSequentialList是两个抽象的List实现类,像AbstractSet类一样,他们覆盖了equals()和hashCode()方法以确保两个相等的集合返回相同的哈希码。若两个列表大小相等且包含顺序相同的相同元素,则这两个列表相等。这里的hashCode()实现在List接口定义中指定,而在这里实现。
       (2)LinkedList和ArrayList类
               在集合框架中有两种常规的List实现:ArrayList和LinkedList。使用哪一种取决于特定的需要。
               ArrayList:底层的数据结构使用的是数组结构,查询修改速度很快,插入删除稍慢,线程不同步。
               LinkedList:底层数据结构是双向链表结构,删除插入很快,查询很慢。
       (3)ListIterator
                ListIterator接口继承Iterator接口以支持添加或更改底层集合中的元素,还支持双向访问。ListIterator没有当前位置,光标位于调用previous和next方法返回的值之间。一个长度为n的列表有n+1个有效索引值。
       (4)Vector
                底层是数组数据结构,功能与ArrayList相似,是同步的线程安全,但效率低。建议使用ArrayList效率高,自己加锁即可。除此之外,Vector还提供了一个子类Stack,它模拟栈这种数据结构。
Stack st=new Stack();
st.push("zhangsan");
st.push("lisi");
System.out.println(st.peek());
st.push("wangwu");
System.out.println(st.pop());
System.out.println(st.pop());
System.out.println(st.pop());
       注意:前面说过,Arrays类提供了asList(Object ... a)方法,该方法可以把一个数组或指定个数的对象转换成一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector类的实例,而是Arrays的内部类ArrayList的实例,这是一个固定长度的List集合,因此程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素。
       (5)Queue接口
                Queue通常用于模拟队列这种数据结构,队列通常是指”FIFO“(先进先出)的容器。PirorityQueue就是Queue接口的实现类。
PirorityQueue pq=new PirorityQueue();
//依次向pq中加入四个元素
pq.offer(6);
pq.offer(-3);
pq.offer(1);
pq.offer(9);
//输出pq队列,并不是按元素的加入顺序排列,而是按元素的大小顺序排列
System.out.println(pq);
//访问队列第一个元素,其实就是最小元素:-3
System.out.println(pq.peek());
4、 Set接口
       Set接口继承Collection接口,是无序的,不允许集合中存在重复项,是依据对象的hashCode码,用equals()方法对比,看两个对象是否重复。
       (1)HashSet:底层数据结构是哈希表,保证元素唯一性(先判断哈希值是否相同,若相同则判断是否是同一个对象,调用equals),线程是非同步的。
       (2)SortedSet接口:集合框架提供了个特殊的Set接口,它保持元素的有序顺序。添加到SortedSet实现类的元素必须实现Comparable接口,否则必须给它的构造函数提供一个Comparator接口的实现。TreeSet类是它的唯一的实现。SortedSet接口一般我们不直接使用,如果我们想要一个有序的Set,我们可以用它的实现类TreeSet
       (3)TreeSet:底层数据结构是二叉树。排序方法一:实现Comparable接口,重写compareTo方法;方法二:当元素不具备比较性时,就让集合自身具备比较性,定义一个类实现接口Comparator,重写compare方法(详细参考P160-161)。
5、 Map接口
       Map接口用于维护键值对,该接口描述了从不重复的键到值的映射。key不允许重复,而value可以重复。和Set很像,其实Set底层就是使用了Map集合。
       (1)HashMap和HashTable类
               都是Map接口典型的实现类。HashMap是线程不安全的实现,HashTable是线程安全的实现。HashTable不允许将null作为key或value,但HashMap允许。
       (2)SortedMap接口和TreeMap实现类
               SortedMap是Map派生的子接口之一,SortedMap有一个实现类TreeMap。TreeMap是一个有序的Map实现。
               有序实现一:TreeMap中的所有key必须实现Comparable接口,所有key的类型要一致。
               有序实现二:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中所有key进行排序,采用该方法时不需要Map的key实现Comparable接口。如下所示:
Map map=new Map(new Comparator(){
      public int compare(Object arg0,Object arg1){
           Stu st1=(Stu)arg0;
           Stu st2=(Stu)arg1;
           int result=st1.name.compareTo(st2.name);
           if(result==0){
              result=st1.age<st2.age?1:(st1.age==st2.age?0:-1);
           }
           return  result; 
      }

});
       (3)WeakHashMap实现类
                  HashMap有key保留对实际对象的强引用,只要HashMap对象不被销毁,该HashMap对象所有key所引用的对象不会被垃圾回收。WeakHashMap中的每个key保存了实际对象的弱引用,当该对象所有key所引用的对象没有被其它强引用变量所引用时,这些key对应的对象就可能会被垃圾回收,然后自动删除这个key对应的key-value。
    基本操作:
        a、添加:
            put(K key, V value);
        b、删除:
            remove(Object key);
            clear();
        d、判断:
            containsKey(Object key);
            containsValue(Object values);
            isEmpty();
        e、获取:
            get(Object key);
            size();
            values();
            entrySet();
            keySet();
6、 Properties类
       Properties类是HashTable的子类,其实它是关联属性文件和Map的一种封装。Properties类中的key和value都是String类型,换句话说:Properties是key和value都为String的一个Map。用法如下:
Properties p=new Properties();
p.load(new FileInputStraem("test.properties"));
P.list(System.out);
System.out.println("----------");
p.put("sex","男");
p.list(System.out);
//写入文件
p.list(new PrintStream(new File("test1.properties")));




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java集合 练习代码

数据结构和Java集合框架

  • 2016-04-29 14:52
  • 64.60MB
  • 下载

Java 集合框架总结与巩固

集合接口概要 各接口及实现类说明 Collection since 12 List since 12 Map since 12 SortedMap since 12 NavigableMap sinc...

java中集合排序

java基础之集合类

一、Java集合类是什么?java集合类型主要有哪些?首先看一张概念图,这里囊括了集合类的大部分关系及内容 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集...

java编程模式集合(上)

  • 2015-06-18 16:22
  • 456KB
  • 下载

Java集合实例

  • 2013-11-11 16:55
  • 6.36MB
  • 下载

java集合框架Stack栈

Stack栈是一个简单的类,操作实现均在父类Vector中完成!!!public class Stack extends Vector { /** * 先进后出 * Vec...

JAVA中常用的集合类型

  • 2013-06-05 16:39
  • 59KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)