Java多维数据结构_java 数据结构

1.数组

int [] arr=new int[数组长度]

java中数组是引用类型,因此需要用new关键字声明内存

数组越界会产生ArrayIndexOutOfBoundsException

for each遍历数组

for(int item:arr){

System.out.println(e);

}

2.多维数组

int a[][]=new int[3][4];  //可以是规则的

int b[][]=new int[3][];

b[0]=new int[3];

b[1]=new int[4];

b[2]=new int [5];  //也可以是不规则的

3.JCF

JCF:java collection framwork

JCF主要的数据结构实现类:

列表:List、Vector、ArrayList、LinkedList

集合:Set、HashSet、TreeSet、LinkedHashSet

映射:Map、HashMap、TreeMap、LinkedHashMap

两个常用的工具类:Arrays、Collections,提供了一些常用查找和排序的算法

ba05215aa240cc79b79013057dd67061.png

4.列表List

List:

有序的Collection

允许重复的元素

元素可以支持不同类型的

List的主要实现

ArrayList(非同步的)

LinkedList(非同步的)

Vector(同步的)

ArrayList:

与普通数组相比,ArrayList的大小可以动态调整,容器填满时,自动扩容50%

和普通数组一样,ArrayList不适合指定位置的插入和删除。主要用于存储查询数据。

遍历方式:

1)ArrayList.iterator会返回一个迭代器,通过这个迭代器的hasNext和next方法来遍历元素

2)for循环

3)for each循环(这种方式最快)

LinkedList:

以双向链表实现的列表,不支持同步

可以被用作堆栈、队列和双端队列进行操作

插入和删除比较高效,随机访问速度很慢,适用于经常变化的数据

遍历方式:

1)ArrayList.iterator会返回一个迭代器,通过这个迭代器的hasNext和next方法来遍历元素

2)for循环,不支持直接存取,但是可以用get(index)方法来找第index位置的元素,底层还是顺序查找(这种方式超级慢)

3)for each循环(这种方式最快)

Vector:

适合在多线程下使用,和ArrayList几乎一样

性能较差,在非同步的情况下,建议使用ArrayList

遍历方式:

与ArrayList相比多了一种Enumeration,通过Vector的elements()方法可以返回一个Enumeration对象,通过Enumeration对象的nextElement方法可以遍历。

不建议使用Enumeration方法遍历,推荐for each。

5.Set

集合Set:

确定性:对任意的对象都能判定其是否属于某一个集合

互异性:集合内的每个元素都是不相同的

无序性:集合内的元素顺序不确定

java中的集合类:

HashSet(基于散列函数的集合,无序,不支持同步)

TreeSet(基于树结构的集合,可排序的,不支持同步)

LinkedHashSet(基于散列函数和双向链表的集合,可排序的,不支持同步)

HashSet:

基于HashMap实现,可以容纳null元素,不支持同步

想要同步可以Set s=Collections.synchronizedSet(new HashSet(...));

常用方法add、clear、contains、remove、retainAll(计算两个集合交集)

判定元素是否相同:先比较两个元素的hashCode返回值是否相同,若相同进一步判断equals方法的返回值是否相同,若仍相同,则这两个元素相同,只保留一个

遍历方法:

for each(更快)

iterator

LinkedHashSet:

继承HashSet,也是基于HashMap实现,可以容纳null元素,不支持同步

方法和HashSet基本一致

与HashSet最大的区别:通过双向链表来维护插入顺序(插入顺序是保留的)

判定元素是否相同:先比较两个元素的hashCode返回值是否相同,若相同进一步判断equals方法的返回值是否相同,若仍相同,则这两个元素相同,只保留一个

TreeSet:

基于TreeMap实现,不可以容纳null元素,不支持同步

方法和上述两种基本一致

根据compareTo方法或者指定Comparator排序,添加到TreeSet中的元素,必须已经实现了Compareable接口的compareTo方法

遍历方法和上述两种一样。

判定元素是否相同:需要元素继承Comparable接口,比较两个元素的compareTo方法

6.Map

Map:存储键值对

java中的Map:

Hashtable:同步,慢,数据量小

HashMap:不支持同步,快,数据量大

Properties:同步,文件形式,数据量小

Hashtable:

K-V都不允许为null

无序的

主要方法:clear,contains/containsValue(这两个一样),containsKey,get,put,remove,size

遍历方法:

Iterator> iter=hashtable.entrySet().iterator;      //.entrySet()方法会返回一个set

根据key的iterator迭代器遍历,先用keySet()方法返回keyset,然后通过keyset的iterator方法返回迭代器,最后通过get(iter.next())来得到值

HashMap:

K-V都允许为null

方法和Hashtable类似,遍历方法也一样

LinkedHashMap:

基于双向链表的维持插入顺序的hashmap,即遍历会按照插入顺序进行遍历

TreeMap:

基于红黑树的Map,可以根据key的自然排序或者compareTo方法进行排序输出

Properties:

继承于Hashtable,可以将K-V对保存在文件当中

适合数据量少的配置文件

方法和Hashtable类似,额外方法:

load:从文件中提取K-V对

store:将K-V对存入文件

getProperty:获取属性

setProperty:设置属性

7.工具类Collections和Arrays

Arrays:处理对象是数组

排序,sort/parallelSort

查找:binarySearch

批量拷贝:copyOf

批量赋值:fill

等价性比较,equals.判断两个数组内容是否相同

Collections:处理的对象是Collection及其子类

排序:sort

搜索:binarySearch

批量赋值:fill

最大最小:max,min

反序:reverse

8.Comparable接口

四大接口之一,接口中只有compareTo方法

大于 返回1,小于返回-1,等于返回0

Arrays和Collections在进行对象sort时,会自动调用该方法

Comparator接口适用于对象类不可更改的时候

改接口中的compare方法可以用户自定义

然后Comparator比较器可以作为参数传递给sort方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值