java中collection是啥?怎么理解?怎么使用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中collection是啥?怎么理解?怎么使用?相关的知识,希望对你有一定的参考价值。

collection是个接口(常用作集合用),它下面有两个子接口分别为
(1)List(2)set
其中List是有序可重复集,set是无序不可重复集。
List又分为三类(1)ArrayList(2)LinkList(3)Vector
ArrayList内部由数组实现,适合查询;
LinkList内部由链表实现,适合增删改。
Vector几乎用不到
set又分为(1)HashSet(2)treeSet
treeSet是二叉树,有序的
HashSet采用散列存储,是无序的。

另外collection是集合的接口
collections是集合的工具类
参考技术A 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

Collection接口
  Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
  所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
  如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
    Iterator it = collection.iterator(); // 获得一个迭代子
    while(it.hasNext())
      Object obj = it.next(); // 得到下一个元素
    
  由Collection接口派生的两个接口是List和Set。

List接口
  List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
和下面要提到的Set不同,List允许有相同的元素。
  除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。
  实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

LinkedList类
  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
  注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
    List list = Collections.synchronizedList(new LinkedList(...));

ArrayList类
  ArrayList实现了可变大小的数组。

它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
参考技术B 容器,储存对象的,放进去取出来 参考技术C 在Java中,Collection是一种容器对象,用于存储和操作一组对象。它是一个接口,位于Java集合框架中,Java集合框架是一个用于存储、操作和处理对象集合的最佳组织方式。Collection接口在Java中定义了一些标准的操作,例如添加、删除、搜索、排序和迭代等,并且该接口有许多子接口,例如List、Set、Queue和Deque等。

Collection接口中定义的方法包括添加元素、删除元素、查找元素等。常用的方法有:

- add(Object o):向容器中添加元素;
- remove(Object o):从容器中移除指定的元素;
- contains(Object o):判断容器中是否包含指定的元素;
- isEmpty():判断容器是否为空;
- size():返回容器中元素的数量;
- iterator():返回容器的迭代器,用于依次访问容器中的元素;
- toArray():将容器中的元素以数组的形式返回。

如下是一个使用Collection接口的例子,该例子演示了如何使用List接口,List接口继承了Collection接口:

```java
import java.util.ArrayList;
import java.util.List;

public class CollectionExample
public static void main(String[] args)
List<String> list = new ArrayList<String>();

// 添加元素
list.add("hello");
list.add("world");
list.add("!");

// 删除元素
list.remove("world");

// 查找元素
if (list.contains("!"))
System.out.println("list contains !");


// 遍历元素
for (String str : list)
System.out.println(str);


// 获取元素数量
System.out.println("list size: " + list.size());

// 将元素转换为数组
Object[] arr = list.toArray();
for (Object o : arr)
System.out.println(o.toString());



```

在这个例子中,我们新建了一个ArrayList实例,然后向其中添加了三个元素:"hello"、"world"和"!"。接着,我们删除了一个元素"world",判断集合中是否包含元素"!",遍历了集合中的所有元素,并打印了集合中的元素数量。最后,我们将集合中的元素转换为数组,并将数组中的所有元素打印出来。

总之,Collection是Java集合框架中最基本、最常用的接口之一,可以用于存储和处理一组对象,如List、Set、Queue等实现都是基于Collection接口的扩展。
参考技术D

线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。

Collection  
├List  
│├LinkedList  
│├ArrayList  
│└Vector  
│ └Stack  
└Set  
Map  
├Hashtable  
├HashMap  
└WeakHashMap

Collection接口  
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java  SDK不提供直接继承自Collection的类,Java  SDK提供的类都是继承自Collection的“子接口”如List和Set。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
Iterator  it  =  collection.iterator();  //  获得一个迭代子
while(it.hasNext())  
Object  obj  =  it.next();  //  得到下一个元素

由Collection接口派生的两个接口是List和Set。

List接口  
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。  
和下面要提到的Set不同,List允许有相同的元素。
除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。
实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

LinkedList类  
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List  list  =  Collections.synchronizedList(new  LinkedList(...));

ArrayList类  
ArrayList实现了可变大小的数组。
它允许所有元素,包括null。ArrayList没有同步。  
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

以上是关于java中collection是啥?怎么理解?怎么使用?的主要内容,如果未能解决你的问题,请参考以下文章

Java中Collection元素打印的问题,图中两句话都打印[张三,李四],还有这里的toString()怎么理解

Java中代码点和代码单元是啥?怎么理解?举例说明下,它们之间有啥联系有啥区别?为啥代码点

hashset是无序的,list是有序的,请问这句话是啥意思,怎么理解

java中,变量副本是啥,在哪里存的啊,怎么查看?

JAVA中枚举是啥意思,怎么用

java中多态是啥意思?