Java常用数据结构基础知识总结(一)


     数据结构是计算机内存或磁盘中存储、组织数据的方式。常用的数据结构如数组、链表、栈、队列、树等等。今天和大家分享和交流一下java语言中常用的数据结构如数组、List(列表)、Map(键值对)、Set及其继承类库,简述它们的特点及项目开发中常见的用途。

1.判断是否为空

大家都知道判断字符串是否为空:
str == null || "".euqals(str) || str.length <= 0 || str.isEmpty(),
首先需要判断在内存中是否有指向,即是否是一个对象,然后判断该字符串是否为空字符串。
同理:

判断数组为空:arr ==null || arr.length ==0

同理不为空:arr != null && arr.length>0

判断List为空:null == list || list.size() == 0 || list.isEmpty()

判断List不为空:list != null && !list.isEmpty()
 
判断Map为空:null == map || map.size() == 0 || map.siEmpty()

判断Map不为空:map != null && !map.isEmpty()

判断Set为空:null == set || set.size() == 0 || set.siEmpty()

判断Set不为空:set != null && !set.isEmpty()

2.常用类库

(一)List是元素有序、可重复、可为null的集合;

①ArrayList 
继承AbstractList实现了List、RandomAccess、Cloneable、Serializble等接口。
特性:本质是一个数组;可被随机访问、能被克隆、支持序列化、容量可以动态增长、非线程安全。

②LinkedList 
继承AbstractSequentialList实现了List、Deque、Cloneable、Serializable等接口。
特性:本质是一个双向链表;支持序列化,能被克隆,非线程安全的。

③Vector 
继承AbstractList实现了List、RandomAccess、Cloneable等接口。
特性:本质是一个队列;可被随机访问,能被克隆,且线程安全。

④Stack 
继承于Vector,读者可参考上
特性:本质是一个栈,具有"先进后出"的特性。

(二)Map是有映射关系的键值对的集合

①HashMap
继承AbstractMap实现了Map、Cloneable、Serializable等接口;非线程安全

②HashTable
继承Dictionary实现Map、Cloneable、Serializable等接口;线程安全

③TreeMap
继承AbstractMap实现NavigableMap、Cloneable、Serializable等接口;非线程安全

④LinkedHashMap
LinkedHashMap是HashMap的子类;基本特性和使用与HashMap保持一致。对于Map而言,如果项目中要求输入的顺序和输出的相同,此时即可使用LinkedHashMap实现。

(三)Set 是元素无序、不可重复、可为空的集合

①HashSet
由HashMap实现,不保证元素顺序且允许使用null元素;非线程安全

②TreeSet
继承AbstractSet实现了NavigableSet、Cloneable、Serializable等接口;非线程安全

以上主要从主要继承关系和接口实现的角度,分析各类库的特性。希望大家有一个整体的把握。

3.常用方法

(一)List常用方法

list的大小size() -- 返回int类型
获取第i个元素get(int i) -- 返回元素的值
判断是否为空isEmpty() --返回boolean类型
是否包含某个元素contains(Object o) --返回boolean类型
添加元素add(Object o) -- 返回boolean类型
数组元素索引值indexOf(Object o) -- 返回int类型
移除数组元素remove(Object o) -- 返回boolean类型,等等。

(二)Map常用方法:

获取map的大小size() -- 返回int类型
map的清空clear()
包含键containKey(Object  key) -- 返回boolean类型
包含值containValue(Object value) -- 返回boolean类型
获取指定元素get(Object key) --返回value的数据类型
添加元素put(Object key,Object value) --返回添加后的map
移除元素remove(Object key) -- 返回移除的map
修改元素的值replace(Object key,Object value) -- 返回修改后的map,等等。

(三)Set常用方法:

添加元素add(Object o)-- 返回boolean类型
是否包含元素contains(Object o)--返回boolean类型
获取set的大小size()--返回int类型
判断set是否为空isEmpty()--返回boolean类型
清空set中的元素clear()
移除元素remove(Object o) --返回boolean类型,等等。

(四)数组常用方法:

元素个数length属性
末尾添加元素:push()
开头添加元素unshift()
删除最后一个元素pop()
删除第一个元素shift()
截取数组元素slice()
数组翻转reverse() 等,
另外数组工具类Arrays也提供了如asList(),sort()等诸多操作数组的方法。有兴趣的朋友可以查阅文档或编程实践之。

关于java集合框架的更多知识点,建议参阅API文档。
至此,介绍了一些java常用的数据类型的基本知识。

以上基础知识,建议编码实践,加深理解。熟练掌握基础后可以研究研究源码。
下篇将和大家分享各类数据结构的遍历问题、转换问题。

你可能感兴趣的:(Java学习)