JavaSE笔记--集合框架

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/qq_29477223/article/details/80872171

List(有序)

Set(无序、不重复)

Map

ArrayList

LinkedList

Vector

HashSet

TreeSet

HashMap

Hashtable

TreeMap

基于数组

基于链表

基于数组

基于哈希表

基于二叉数

基于哈希表

基于哈希表

基于红黑树

尾部追加查询快,中间插入删除慢

尾部追加和查询慢,中间插入删除快

ArrayList一样,但多线程同步

hashcode码为标识,性能优于TreeSet适合快速查找

需要排序时使用

Map中插入、删除和定位元素

效率没HashMap高,但线程同步

按自然循序或自定义顺序遍历键

允许为空

允许为空

允许为空

允许有一项为空

不允许为空

允许一项为空

不允许为空

不允许为空

0.引言

      数据结构是以某种形式将数据组织在一起的集合。数据结构不仅存储数据,还支持那些访问和处理的操作。比如ArrayList它是一种将数据存储在线性表中的数据结构,另外Java还提供了能有效地组织和操作数据的数据结构,这些数据结构通常称之为Java集合框架(Java Collections Framework)。

      在面对对象思想里,一种数据结构被称之为一个容器,它是一个能存储数据或者元素的对象。定义一种数据结构从本质上讲就是定义一个类,数据结构类应用使用数据域存储数据,并提供方法支持查找、插入和删除等操作。因此创建一个数据结构就是创建这个类的一个实例。然后用这个实例上的方法操作这个数据结构。

      集合框架支持两种类型的容器:存储一个元素集合,简称集合(collection)和存储键值对,称之图(map)。


1.集合

      集合(Collection)包括三种类型:规则集(Set)、线性表(List)、队列(Queue)。Set实例用于存储一组不重复的元素,List的实例用于存储一个由元素构成的有序集合,Queue的实例用于存储用先进先出方式处理的对象。这些集合的特性都被定义在接口中,而它的实现是在具体类中提供的。

      Collection接口是util包下的,所以在使用Collection下的方法要导util包,提供了具体的子接口(List和Set)。Collections有一个方法可对元素排序sort(List list);

       主要方法:

          boolean  add(E e)添加 

          boolean  clear()清除  

          boolean   isEmpty()判断容器是否包含元素 

          boolean remove(Object o)在此collection中移除指定元素 

          Iterator<E>  iterator()返回在此collection的元素上进行迭代的迭代器

          int  size()返回此collection中的元素数

    

2.子接口 List<E> extends Collection<E>:有序,可重复

     新增方法:

        void add(int index,E element) 在列表的指定位置插入指定元素

        E get(int index)返回列表中指定位置的元素

        E remove(int index)移除列表中指定位置的元素

        E set(int index,E element)用指定元素替换列表中指定位置的元素

        Object[] toArray()返回按适当顺序包含列表中所有元素的数组

   1). ArrayList<E>类实现List<E>接口:基于数组,尾部追加查询快,中间插入删除慢,允许为空

         常用方法:

            ArrayList()构造一个初始初始为10的空列表

            ArrayList(Collection<? extends E> c)构造一个包含指定collection的元素列表

            ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表

            void trimToSize()将此ArrayLIst实例的容量调整为列表的当前大小

        实例

package com.example.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Demo01 {
	public static void main(String[] args) {
		List list=new ArrayList();
		list.add("hello");
		list.add(12);
		list.add(true);
		list.add(1,"world");//输出helloworld12true
		list.set(0, "hello1");//输出hello1world12true
		list.remove(1);//输出hello112true
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i));;
		}
		System.out.println();
		list.clear();
		list.add("hello2");
		list.add(11);
		list.add(false);
		//迭代器的使用
		Iterator it=list.iterator();//it先指向第一个元素的前面
		while(it.hasNext()){//再判断是否有下一个元素
			Object obj=it.next();//有取得下一个元素
			System.out.print(obj);
		}
	}
}

输出:

       2).LinkedList<E>实现List<E>接口:基于链表,尾部追加和查询慢,中间插入删除快

        方法与ArrayList相同

       3).Vector 底层基于数组的实现,是同步的(在多线程环境安全)

        方法与ArrayList相同

2.子接口 Set<E> extends Collection<E>:无序,不能出现重复元素,至多包含一个null元素

       1).HashSet<E>实现Set<E>接口,基于哈希码(HashCode),允许有一项为空
        实例:
package com.example.test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Demo02 {
	public static void main(String[] args) {
		Set set=new HashSet();
		set.add("hello");
		set.add(12);
		set.add(null);
		set.add(true);
		set.add(null);//只输出一个null,不会报错
		Iterator it=set.iterator();
		while(it.hasNext()){
			Object obj=it.next();
			System.out.print(obj);
		}
	}
}
输出
     2).TreeSet<E>实现Set<E>接口,基于树的实现,不允许出现为空,并插入的类型一致,不然会报错

3.图    

        图是一种依照键值存储元素的容器,键值很像下标。在List中,下标是整数,在Map中,键值可以是任意类型的对象。图中不能有重复的键值,每个键值都对应一个值,一个键值和它的对应值构成一个条目,真正在图中存储的是这个条目。

        图的类型有三种:散列图HashMap、链式散列图LinkedHashMap和树形图TreeMap。

        常用方法:

        void clear() 从此映射中移除所有映射关系

        V get(Object key) 返回指定键所映射的值,没有返回null

        Set<K> keySet()返回此映射中包含的键的Set视图,就是得到所有的key

        V put(K key,V value)将指定的值与此映射中的指定键关联

        V remove(Object key)如果存在一个键的映射关系,将其移除

        int size()返回此映射中的键值映射关系数

        Collection<V> values()得到所有的值

    1).HashMap<K,V>实现Map<K,V>接口,基于哈希码,允许有一项为空,不同步
    2).TreeMap<K,V>实现Map<K,V>接口,基于红黑树,不允许为空
    3).Hashtable<K,V>实现Map<K,V>接口,底层基于哈希表,是同步的

    实例:

package java0401;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Demo01 {
	public static void main(String[] args) {
		//Map map=new HashMap();
		Map map=new TreeMap();
		map.put(1001, "tom");
		map.put(1002, 123);
		map.put(1003, null);
		 Set<Map.Entry> set=map.entrySet();
		 for (Map.Entry entry : set) {
			System.out.println(entry.getKey()+":"+entry.getValue());
		}
		//图的遍历
		/*Set set=map.keySet();
		Iterator it=set.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}*/
		//获得所有的VALUE
	/*	Collection cl=map.values();
		Iterator it=cl.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}*/
		//map.clear();
		//map.remove("hello");
		//System.out.println(map.get("hello"));//得到hello映射的值,没有返回NULL
	}
}

结果


猜你喜欢

转载自blog.csdn.net/qq_29477223/article/details/80872171