java中数据结构

来源:互联网 发布:知乎 匿名用户 编辑:程序博客网 时间:2024/05/20 03:39
数据结构按照逻辑关系(数据组织方式)主要划分为以下四类:
1、集合
2、线性结构
3、树结构
4、图结构
JDK中提供了Collection接口,用于定义一个聚合类应具有的基本功能(方法),而这些功能由接口的实现类完成。
在JDK1.4之后增加了Map接口,定义了映射集合类应具有的基本功能,并提供了散列映射集(HashMap)的实现。
Collection包含
List 常用方法:size()获取List的长度(即List包含数据元素的总数)
 add(Object obj)向List的尾部添加一个元素obj
 add(int i, Object obj)向List中索引i 的位置添加元素obj
 set(int i, Object obj)使用元素obj替换索引i 位置的元素,并返回被替换的元素。
 remove(int i)删除索引i 指定位置的元素,并返回被删元素.
 get(int i) 返回索引i 指定位置的元素。
ArrayList
ArrayList使用了连续得内存空间存储数据,当添加或者删除元素是,其后的都将被移动(除线性表最后位置外)
在遍历方面有较高的效率
1.ArrayList适合存储经常用于显示的数据,并且不对查询结果进行修改,而仅仅是用于客户显示。
2.如果我们只是在ArrayList的末尾进行添加(或删除)操作,可以使用ArrayList。
LinkedList
LinkedList是使用指针关联的双向链表,其获取下一个元素的方式是通过指向下一个元素的地址对象(通常叫做指针)获取的。
在任意位置删除(添加)效率较高 因为不需要移动LinkedList中的其他元素。当频繁插入(删除)时,首选使用LinkedList
1.LinkedList对于ArrayList来说,其遍历速度较慢,因为他获取下一个元素的时间为寻址时间。
2.LinkedList适合存储数据元素变动较大的线性集合,可以更快速的对指定位置的元素进行增加、删除、修改和查询功能。
Vector 
Vector是一个Object类型的可变长的数组,其元素类型可以是任意的数据类型(Object的子类),我们使用Vector通常是存储元素类型不同,但描述对象又统一的集合。
Vector与ArrayList的区别是Vector是线程安全的,故Vector相对于ArrayList的速度稍慢一些。


线性表(任意长度的线型集合)和数组(有定长的线型集合)的区别:
1.本质区别是长度是否可变
2.获取元素的方式不同
数组:用下标
线性表:使用get方法


Set
接口Set的常用方法:
size() 获取尺寸大小
add(Object obj)向Set添加obj元素
remove(Object obj)从Set中移除数据元素obj
contains(Object obj)判断当前Set中是否包含数据元素obj,如果包含返回true,否则返回false
iterator() 将Set装入迭代器(Iterator<Student> iter = stuSet.iterator();Student s = iter.next();)
HashSet
在判断数据是否重复时:
1.检查HashCode值是否和集合中的值相同
2.如果hashCode相同再调用equals方法进一步检查。(equals返回真表示重复)
TreeSet
TreeSet是一个有序集合,其元素按照升序排列,默认是按照自然顺序排列,也就是说TreeSet中的对象元素需要实现Comparable接口。TreeSet类中跟HashSet类一样也没有get()方法来获取指定位置的元素,所以也只能通过迭代器方法来获取。
TreeSet虽然是有序的,但是并没有具体的索引,当插入一个新的数据元素的时候,TreeSet中原有的数据元素可能需要重新排序,所以TreeSet插入和删除数据元素的效率较低。
当我们使用TreeSet存储自定义类时,需要在自定义类中重写compareTo方法,以提供比对形式,在TreeSet不能对用户自定义的类型进行正确的树状排序。

TreeSet比HashSet多一个排序
TreeSet通过compareTo方法来确定位置
HashSet通过equals方法和hashCode方法来确定元素的唯一性

Map包含:
Java中使用Map接口描述映射结构,映射Map是一个独立的接口,
描述的是键key-值value的对应关系,Map不允许键重复,并且每个键只能对应一个值。
HashMap
TreeMap


泛型:
  泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。 Java语言引入泛型的好处是安全简单。
对于数据结构来说,泛型用于指定当前数据结构存储的元素类型,例如:ArrayList<String>表示当前的数组线性表只能存储String类型的数据。
也可以在List中存储自定义类型,例如:LinkedList<Student>表示当前的双向链表中只能存储Student的对象。
0 0