Java 集合类Collection、List

简介:

Collection接口:

    1.集合可以理解为一个动态的对象数组,不同的是集合中的对象内容可以任意扩充。

        也就是说在集合当中的操作比较方便,容易添加或者删除

    2.集合的特点:

        性能高

        容易扩展和修改

        这也是为什么使用集合而不使用数组的主要原因

    3.Collection的常用子类

        List

        Set

        Queue

        这几个子类也是它比较常用的


接口Collection<E>

    所有超级接口:

        Iterable<E>

    所有已知接口:

        BeanContextBeanContextServicesBlockingDeque<E>, BlockingQueue<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E> 

    

    

public interface Collection<E>extends Iterable<E>

    Collection层次结构中的根接口。Collection表示一组对象,这些对象也称为collection的元素。一些collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。JDK不提供此接口的任何实现:它提供更具体的子接口(如Set和List)实现。此接口通常用来传递collection,并在需要最大普遍性的地方操作这些collection。

    包(bag)或多集合(multiset)(可能包含重复元素的无序collection)应该直接实现此接口。

    所有通用的Colelction实现类(通常通过它的一个子接口间接实现collection)应该提供两个“标准”构造方法:一个是void(无参数)构造方法,用于创建空collection;另一个是带有Collection类型单参数的构造方法,用于创建一个具有参数相同元素新的collection。实际上,后者允许用户复制任何collection,以生成所需实现类型的一个等效collection。尽管无法强制执行此约定(因为接口不能包含构造方法),但是Java平台库中所有通用的Collecion实现都遵从它。

    此接口中包含的“破坏性”方法,是指可修改其操作的collection的那些方法,如果此collection不支持该操作,则指定这些方法抛出UnsupportedOperationException。如果是这样,那么在调用对该collection无效时,这些方法可能,但并不一定抛出UnsupportedOperationException。例如,如果要添加的collection为空且不可修改,则对该collection调用addAll(Collection)方法时,可能但并不一定抛出异常。

    一些collection实现对它们可能包含的元素有所限制。例如,某些实现禁止null元素,而某些实现则对元素的类型有限制。试图添加不合格的元素将抛出一个未经检验的异常,通常是NullPointerException或ClassCastException。试图查询是否存在不合格的元素可能抛出一个异常,或者只是简单地返回false;某些实现将表现出前一种行为,而某些实现则表现后一种。较为常见的是,试图对某个不合格的元素执行操作且该操作的完成不会导致将不合格的元素插入collection中,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。

    由每个collection来确定其自身的同步策略。在没有实现的强烈保证的情况下,调用由另一进程正在更改的collection的方法可能会出现不确定行为;这包括直接调用,将collection传递给可能执行调用的方法,以及使用现有迭代器检查collection。

    Collections Framework 接口中的很多方法是根据equals方法定义的。例如,contains(Object o)方法的规范声明:“当且仅当此collection包含至少一个满足(o==null ? e==null:o.equals(e))的元素e时,返回true。”不应该将此规范理解为它暗指调用具有非空参数o的Collection.contains方法会导致为任意地e元素调用o.equals(e)方法。可随意对各种实现执行优化,只要避免调用equals即可,例如,通过首先比较两个元素的哈希码。(Object.hashCode()规范保证哈希码不相等的两个对象不会相等)。较为常见的是,各种Collections Framework 接口的实现可随意利用底层Object方法的指定行为,而不管实现程序认为它是否合适。

    此接口是 Java Collections Framework 的一个成员。




List接口:Collection的子接口

    1.List接口可以存放任何数据,而且在List接口中内容是可以重复的

    2.List接口常用子类:

        ArrayList  --JDK1.2推出之后,异步处理方式,性能高,属于非线程安全

        Vector     --JDK1.0推出,采用同步处理方式,性能低,属于线程安全

    3.常用操作:

        判断集合是否为空:boolean isEmpty()

        查找指定的对象是否存在:int indexOf(Object o)

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package  com.jikexueyuan.list;
 
import  java.util.ArrayList;
import  java.util.List;
 
public  class  ListDemo01 {
 
     public  static  void  main(String[] args) {
         List<String> lists =  null ;
         lists =  new  ArrayList<String>();
         lists.add( "A" );
         lists.add( "B" );
         lists.add( "A" );
         for ( int  i= 0 ; i<lists.size(); i++){
             System.out.println(lists.get(i));
         }
         lists.remove( 0 );
         System.out.println( "删除之后:" );
         for ( int  i= 0 ; i<lists.size(); i++){
             System.out.println(lists.get(i));
         }
         System.out.println( "集合是否为空:" +lists.isEmpty());
         System.out.println( "B是否存在:" +lists.indexOf( "B" ));
         //indexOf(Object o)  返回类型:int  返回此列表中第一次出现的指定元素的索引;如果
         //此列表不包含该元素,则返回-1
     }
 
}

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package  com.jikexueyuan.list;
 
import  java.util.List;
import  java.util.Vector;
 
public  class  ListDemo02 {
 
     public  static  void  main(String[] args) {
         List<String> lists =  null ;
         lists =  new  Vector<String>();
         lists.add( "A" );
         lists.add( "B" );
         for  ( int  i =  0 ; i < lists.size(); i++) {
             System.out.println(lists.get(i));
         }
     }
 
}

        



Set接口:

    1.Set接口中不能加入重复元素,但是可以排序。

    2.Set接口的常用子类

        散列存放:HashSet

        有序存放:TreeSet

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package  com.jikexueyuan.list;
 
import  java.util.HashSet;
import  java.util.Set;
import  java.util.TreeSet;
 
public  class  SetDemo01 {
 
     public  static  void  main(String[] args) {
         Set<String> s =  null ;
         s =  new  HashSet<String>();
         s.add( "B" );
         s.add( "A" );
         s.add( "C" );
         s.add( "D" );
         s.add( "E" );
         s.add( "F" );
         System.out.println(s);
//      s = new TreeSet<String>();
//      s.add("B");
//      s.add("A");
//      s.add("C");
//      s.add("D");
//      s.add("E");
//      s.add("F");
//      System.out.println(s);
     }
 
}



Iterator接口:

    1.集合输出的标准操作:

        标准做法,使用Iterator接口

    2.操作原理:

        Iterator是专门的迭代输出接口,迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出

    3.注意事项:

        在迭代输出的同时,不能通过集合进行remove操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package  com.jikexueyuan.list;
 
import  java.util.ArrayList;
import  java.util.Iterator;
import  java.util.List;
 
public  class  IteratorDemo01 {
 
     public  static  void  main(String[] args) {
         List<String> lists =  new  ArrayList<String>();
         lists.add( "A" );
         lists.add( "B" );
         lists.add( "C" );
         lists.add( "D" );
         lists.add( "E" );
         lists.add( "F" );
         Iterator<String> iter = lists.iterator();
         while  (iter.hasNext()) {
             String str = iter.next();
             if  ( "A" .equals(str)) {
                 iter.remove();
             } else {
                 System.out.println(str);
             }
         }
     }
     
}




Map接口

    1.保存形式:

        key----->value的方式保存(键值对方式保存,通过key来找到value)

        例如:小明:13433321122(通过名字找到电话号码)

    2.常用子类:

        HashMap:无序存放,key不允许重复

        Hashtable:无序存放,key不允许重复

            在以Map接口存放数据的时候key都是唯一的。




本文转自yeleven 51CTO博客,原文链接:http://blog.51cto.com/11317783/1764341
相关文章
|
2天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
3天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
7天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
7天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
11 0
|
7天前
|
存储 Java 编译器
Java集合丛林:深入了解集合框架的秘密
Java集合丛林:深入了解集合框架的秘密
13 0
Java集合丛林:深入了解集合框架的秘密
|
9天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
21 9
|
9天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
25 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
10天前
|
存储 安全 Java
java多线程之原子操作类
java多线程之原子操作类
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
5月前
|
Java
Java集合框架“List“
Java集合框架“List“
47 1