集合

        集合是一组可变数量的数据项(也可能是0个)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。一般来讲,这些数据项的类型是相同的,或基类相同。

Java中的集合结构:

android List 数据结构_LinkedList

一:Collection

        层次结构的集合接口,用于描述一组对象。

(Ⅰ):有序集合 List

List集合的特点:

  • 线性存储数据;
  • 允许写入重复的数据。

List集合的常用方法:

方法

说明

示例

add

添加元素

arrayList.add(“Chiang”);

isEmpty

判断集合中是否有元素

arrayList.isEmpty()

size

获取集合中元素的数量

arrayList.size();

remove

移除元素

arrayList.remove(0);

indexOf

获取元素在集合中的索引

arrayList.indexOf(“Chiang”)

set

根据索引位置修改元素值

arrayList.set(0, “TionsChiang”);

contains

判断集合中是否包含某个元素

arrayList.contains(“Chiang”)

get

获取指定索引的元素

arrayList.get(0)

clear

清空元素

arrayList.clear();

遍历集合的方式:

//方式一
		for(int i = 0; i < arrayList.size(); i++){
			System.out.println(arrayList.get(i));
		}

//方式二 使用迭代器迭代集合中的每个元素
		//获取迭代器
		Iterator iter = arrayList.iterator();
		while(iter.hasNext()){
			//得到每个元素
			Object value = iter.next();
			System.out.println(value);
		}

//方式三 快速迭代,在迭代过程中不允许对集合进行增删改操作
		//快速迭代语法  for(元素类型  元素名  : 被遍历的集合或数组名){}
		//快速的特点:以只读只进的方式访问元素
		for(Object value : arrayList){
			System.out.println(value);
		}
1.ArrayList(动态数组)

        ArrayList集合实现List接口,List接口的特点是存储的元素是有序,并且可以写入重复的元素。
        ArrayList在执行查询时由于直接通过数组索引访问,因此有着极高的性能,但在执行增删的时候性能较差。

创建ArrayList的方式:

ArrayList arrayList = new ArrayList();

基于多态性父接口可以接受集合的实例对象:

List list = arrayList;
Collection coll = arrayList;

泛型:
        泛型是程序语言的特性,JDK1.5引入,用于限定集合中写入元素的类型,增强程序数据类型安全及减少类型转换的次数,并且只能写入引用类型。

ArrayList<Integer> intList = new ArrayList<>();
2.LinkedList(双向链表结构集合)
  • 实现了List接口;
  • 链表数据结构,通过指针形成物理上的同块数据;
  • 链表结构在执行增删改的时候有着优异的性能,但是在执行查询性能较差。

创建LinkedList的方式:

LinkedList<String> list = new LinkedList<>();
3.Stack(栈)
  • 栈结构集合;
  • 元素先进后出。

创建Stack的方式:

Stack<String> stack = new Stack<>();

弹栈,获取栈顶的元素:

String value = stack.pop();
4.Vector(向量)
  • 动态数组;
  • 作用和ArrayList相同;
  • Vector是线程安全的,ArrayList是非线程安全的。

创建Vector的方式:

Vector<String> vector = new Vector<>();
(Ⅱ):无序集合 Set

Set集合特点:

  • 无序存储;
  • 不能存储重复的元素。
1.HashSet(哈希集合)

创建HashSet的方式:

HashSet<String> set = new HashSet<>();

HashSet添加元素的原理机制:

HashSet中所有存储的元素都将存储在map中;
set.add(元素)执行后, 元素将作为键添加至map中;
set.add方法将通过map.put方法执行;
map.put键的原则是: 如果要添加元素的hash值和已有的键相同 并且 要添加元素和已有的键是同一个对象 或者 要添加的元素使用equals方法与键比较相同;
如果同时满足这两个条件则表示元素值已经存在;
判定重复数据的标准:hash值相同并且equals比较也相同。

2.TreeSet(树集合)
  • 能够自定义序列规则;
  • TreeSet添加元素对象必须要implements Comparabl接口。

创建TreeSet的方式:

TreeSet<String> set = new TreeSet<>();

二:Map

        键值结构的集合接口,可以通过键值获取。

  • Map接口
  • 以键值对的方式存储数据
  • 通过键获取值
  • 键不能重复
  • 值允许重复

        Map集合的本质即Set<Entry>类型的集合,Map集合还将写入了Node[] 数组中(单向链表结构),并提供了相应的方法方法。

Map集合的常用方法:

方法

说明

示例

put

添加键值对

map.put(1001, “Chiang”);

get

根据键获取值

map.get(1001)

size

集合中的元素数量

map.size()

keySet

获取所有的键

map.keySet()

values

获取所有的值

map.values()

entrySet

获取所有的键值对

map.entrySet()

HashMap

键值结构,根据键获得值

HashMap<K,V> map = new HashMap<>();

遍历Map中元素的方式:

//Map中的每个元素的类型是Entry类型,一个Entry对象记录了一个键值对
		for(Entry<Integer, String> element : map.entrySet()){
			//通过entry对象获取键值对
			System.out.println(element.getKey()+"\t"+element.getValue());
		}
HashTable

HashTable和HashMap功能相同
区别点: HashTable线程安全,HashMap非线程安全