JAVA数据结构

JAVA数据结构

列表(ArrayList,LinkedList,Vector)

ArrayList(不支持同步

ArrayList中的常用方法
  • add():向末尾添加元素
  • size() :获取数组元素的长度
  • get():获取元素的值
  • remove():删除元素
ArrayList中常用的三种遍历方式
  • 迭代器遍历
  • 索引遍历
  • for循环遍历
三种遍历方法的代码实现及其效率
//对于线性的列表,适合用for循环进行遍历
import java.util.ArrayList;
import java.util.Iterator;   //迭代器

public class ListDemo {
	public static void main(String[] args) {
		//ArrayList创建100000个元素的列表
		ArrayList<Integer> a = new ArrayList<Integer>();
		int count = 100000;
		for(int i = 0; i< count;i++)
			a.add(i);
		traverByIterator(a);
		traverByIndex(a);
		traverByFor(a);
		
	}
	
	//迭代器遍历
	public static void traverByIterator(ArrayList<Integer> a) {
		System.out.println("迭代器遍历");
		Iterator<Integer> iterator =  a.iterator();      //不能new
		long startTime = System.nanoTime();              //获取系统时钟
		while(iterator.hasNext()) {                      //存在下一个
			iterator.next();
		}
		long endTime = System.nanoTime();
		long time = endTime - startTime;
		System.out.println(time);
	}
	
	//索引遍历
	public static void traverByIndex(ArrayList<Integer> a) {
		System.out.println("索引遍历");
		long startTime = System.nanoTime();
		for(int i = 0; i < a.size(); i++) {
			a.get(i);
		}
		long endTime = System.nanoTime();
		long time = endTime - startTime  ;
		System.out.println(time);
	}
	
	//for循环进行遍历
	public static void traverByFor(ArrayList<Integer> a) {
		System.out.println("for循环遍历");
		long startTime = System.nanoTime();
		for(Integer item:a) {
			;
		}
		long endTime = System.nanoTime();
		long time = endTime - startTime;
		System.out.println(time);
	}
}

运行结果

由运行结果可以看出,对于线性表的遍历适合用for循环和索引方式进行遍历,运行
时间较短,效率比较高。

LinkedList(不支持同步

常用方法

和ArrayList的方法基本相同

三种遍历方式
  • 迭代器遍历
  • 索引遍历
  • for循环遍历
三种遍历方式的代码实现

和ArrayList代码相同,仅仅是将ArrayList换成LinkedList

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

//链表的演示
public class LinkedListDemo {

	public static void main(String[] args) {
		LinkedList<Integer> b = new LinkedList<Integer>();
		for(int i = 0; i < 100000;i++) {
			b.add(i, i);
		}
		traverByFor(b);
		traverByIndex(b);
		traverByIterator(b);
	}
	
	//迭代器遍历
		public static void traverByIterator(LinkedList<Integer> a) {
			System.out.println("迭代器遍历");
			Iterator<Integer> iterator =  a.iterator();      //不能new
			long startTime = System.nanoTime();              //获取系统时钟
			while(iterator.hasNext()) {                      //存在下一个
				iterator.next();
			}
			long endTime = System.nanoTime();
			long time = endTime - startTime;
			System.out.println(time);
		}
		
		//索引遍历
		public static void traverByIndex(LinkedList<Integer> a) {
			System.out.println("索引遍历");
			long startTime = System.nanoTime();
			for(int i = 0; i < a.size(); i++) {
				a.get(i);
			}
			long endTime = System.nanoTime();
			long time = endTime - startTime  ;
			System.out.println(time);
		}
		
		//for循环进行遍历
		public static void traverByFor(LinkedList<Integer> a) {
			System.out.println("for循环遍历");
			long startTime = System.nanoTime();
			for(Integer item:a) {
				;
			}
			long endTime = System.nanoTime();
			long time = endTime - startTime;
			System.out.println(time);
		}
	}

执行结果:
在这里插入图片描述
因此对于链表的遍历应该采用迭代器方式,效率最高,最不适宜用索引进行顺序遍历。

Vector(支持同步,适合于多线程)

  • 与ArrayList相似,属于最早的数据结构,性能上较差
  • 对于非同步的情况下应该使用Arraylist
  • 现在已很少使用,一般都用ArrayList代替
    使用方法同ArrayList基本相同,不同的是它多了一种遍历方式---------Enumeration

集合

特点

  • 确定性:集合中的元素一定是确定的
  • 互异性:没有重复元素
  • 无序性:元素的位置和顺序无关

集合接口Set的子类

  • HashSet: 基于散列函数的集合,无序,不支持同步
  • TreeSet:基于树结构的集合,可排序,不支持同步(不能容纳null)
  • LinkedHashSet:j基于散列和双向链表的集合,可排序,不支持同步

集合常用操作

  • add :添加元素
  • clear:清空结合
  • contains:判断是否包含
  • remove:删除
  • retainALL:计算两个集合的交集
  • size:集合元素个数
  • compareTo或Comparator:排序(TreeSet)

集合遍历的顺序

  • HashSet:无序
  • LinkedHashSet:j:按照插入时的顺序
  • TreeSet:按照从小到大的顺序

映射Map

  • 相当于python中的字典数据类型

映射的几种类型

  • Hashtable(同步,数据量小,慢)
  • HashMap(不支持同步,快,数据量大)
  • Properties(同步,文件形式,数据量小)

Map的遍历方法

  • HashMap
  • LinkedHashMap
  • TreeMap

Hashtable

  • K-V对都不允许为空
  • 同步,多线程安全
  • 无序
Hashtable操作方法
  • clear:清空
  • contains/containsValue:是否包含值
  • containsKey:是否包含关键字
  • get:获取值
  • put:添加
  • remove:删除
  • size:长度

HashMap

  • K-V对都允许为null
  • 不同步,多线程不安全
  • 无序
HashMap操作方法

同Hashtable基本一致

Properties

唯一一种能够以文件形式存储的Map

Properties操作方法
   包含以上的方法,但是多出四种独有的方法
  • load:将文件进行加载
  • store:写入到文件
  • getProperty:获取属性
  • setProperty:设置属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值