java_集合

简介

集合,简称集,是数学中一个基本概念,也是集合论的主要研究对象。集合论的基本理论创立于19世纪,关于集合的最简单的说法就是在朴素集合论(最原始的集合论)中的定义,即集合是“确定的一堆东西”,集合里的“东西”则称为元素。现代的集合一般被定义为:由一个或多个确定的元素所构成的整体。

Collection

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

list接口

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

实现类 ArrayList

此类是动态数组,比较方便查找数据。
特点:

  1. 有序
  2. 列表通常允许重复的元素
  3. 线程不安全
  4. 更擅长做查询(随机访问元素时)操作

子类独有方法

addAll(Collection<? extends E> c);boolean
addAll(int index, Collection<? extends E> c);boolean
clear();void–移除此列表中的所有元素。
get(int index);E–返回此列表中指定位置上的元素。
size();int–返回此列表的元素数。

Arraylist的底层实现

package com.test;
public class Cell {
	public String data;
	public Cell next;
}

package com.test;
public class MyArrayList {
	public Cell head;
	public Cell getTail(){
		if(head == null)	return null;
		Cell p = head;
		for(;;){
			if(p.next == null)break;
			p=p.next;
		}
		return p;
	}
	public void add(String x){
		Cell p = new Cell();
		p.data = x;
		Cell t = getTail();
		if(t == null){
			head = p;
		}else{
			t.next = p;
		}
	}
	public int size(){
		int n = 0;
		Cell p = head;
		for(;;){
			if(p == null)break;
			p = p.next;
			n++;
		}
		return n;
	}
public String get(int n){
		Cell p = head;
		for (int i = 0; i < n; i++) {
			p= p.next;
		}
		return p.data;
	}
}

package com.test;
public class MyTest {
	public static void main(String[] args) {	
		MyArrayList list = new MyArrayList();
		list.add("123");
		list.add("456");
		list.add("789");
		list.add("000");
		list.add("999");
		list.add("abc");
		list.add("xyz");
		for (int i = 0; i < list.size(); i++) {	
			System.out.println(list.get(i));
		}
	}
}

实现类 LinkedList

此类为双向链表,通常用于插入和删除操作。
特点:

  1. 有序
  2. 列表通常允许重复的元素
  3. 默认添加元素到链表末尾
  4. addFirst removeFirst
  5. 更擅长做添加和删除操作—性能比较快
  6. 可以当作队列去使用

子类独有的方法

addFirst(E e);void–将指定元素插入此列表的开头。
addLast(E e) ;void–将指定元素添加到此列表的结尾。
getFirst();E–返回此列表的第一个元素。
getLast();E–返回此列表的最后一个元素。
pop();E–从此列表所表示的堆栈处弹出一个元素。
push(E e);void–将元素推入此列表所表示的堆栈。
removeFirst();E-- 移除并返回此列表的第一个元素。
removeLast();E–移除并返回此列表的最后一个元素。
size();int–返回此列表的元素数。

实现类 Vector

动态数组 JDK1.1版本之前用的比较多—线程安全

set 接口

一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

实现类 HashSet

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

子类LinkedHashSet
特点:

1.不能存放重复元素–Hashset里面的重复元素:hashcode相同的对象
2.无序
3.set结构不能使用循环来进行遍历(没有index)
4.运行速度比较快 西省空间换时间
5.传统上HashSet里面的加载因子—桶

实现类 TreeSet

基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

特点

倒挂的树形结构:二叉树
1.不能存放重复元素
2.set结构不能使用循环来进行遍历(没有index)
3.认为TreeSet里面的元素是有序的
–如果存Integer 有序 实现了Comparable接口
–如果自定义对象Person 需要实现Comparable接口,才可以把Person装入到TreeSet里面

TreeSet的底层实现

package com.bean2;
public class Node {
	public int data;//数据
	public Node leftNode;// 左节点
	public Node rightNode;// 右节点
	public void addNode(Node t){
		if(t.data<this.data){	
			if(leftNode == null){
				leftNode = t;
			}else{
				leftNode.addNode(t);
			}
		}else{
			if(rightNode == null){
				rightNode = t; 
			}else{
				rightNode.addNode(t);
			}
		}
	}
	public void zhongxu(){
		if(leftNode!=null) leftNode.zhongxu();
		System.out.println(data);
		if(rightNode!=null) rightNode.zhongxu();
	}
}
package com.bean2;
public class MyBigTree {
	Node root;
	public void add(int x){
		Node p =new Node();
		p.data = x;
		if(root == null){
			root = p;
		}else{
			root.addNode(p);
		}
	}
	public void sort(){	
		if(root == null) return;
	    root.zhongxu();	
	}
}
//调试类
package com.bean2;
public class Test {
	public static void main(String[] args) {
		MyBigTree tree = new MyBigTree();
		tree.add(6);
		tree.add(7);
		tree.add(8);
		tree.add(1);
		tree.add(10);
		tree.add(9);
		tree.sort();
	}
}

Map<K,V>(映射表)

此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

子类HashMap
子类LinkedHashMap
方法来源于父类
特点

  1. k -key v-value叫做键值对
  2. 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

主要方法

clear();void–从此映射中移除所有映射关系(可选操作)。
hashCode();int–返回此映射的哈希码值。
remove(Object key);V–如果存在一个键的映射关系,则将其从此映射中移除(可选操作)
size();int–返回此映射中的键-值映射关系数。
keySet();Set–返回此映射中包含的键的 Set 视图。
values();Collection–返回此映射中包含的值的 Collection 视图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值