数据结构
在编码的时候,我发现我的《数据结构》的知识有点零散。有时候会很懵逼一个逻辑结构应该采用怎么样的一个数据结构。故特回顾一下菜鸟教程里的数据结构学习,该学习主要是使用java语言进行回溯,因为毕竟我是写android的。
ArrayList
近段时间的开发中经常使用到这个对象进行数据结构的应用。
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口。
使用方法:
ArrayList<E> objectName =new ArrayList<>(); // 初始化
- 添加元素使用的是
add()
方法 - 访问数据使用
get()
下标索引进行检索 - 修改数据使用
set()
- 删除数据使用
remove()
这些方法不需要死记硬背,重要的是学会使用,不记得就可以翻翻文档看看。
因为数据结构是为了适应业务逻辑的工具。重点是清晰其实现的过程即可。
LinedList
这个跟上面的数据结构经常拿来比较和对比性使用:
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
以下情况使用 ArrayList :
-
频繁访问列表中的某一个元素。
-
只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList : -
你需要通过循环迭代来访问列表中的某些元素。
-
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作
简单来说,就是你的数据更改波动比较多的话,推荐采用LinkedList。该数据结构可以对整个数据链的前后进行操作,这也是链的一大特点。
HashMap
集合,这个是无序的一个集合数据结构。keyValue对,键值对进行定位式的储存模式;
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
基本对于数据的处理方法和上面List很相像,主要强调以下几点:
- 添加数据使用的
put()
,记得键值对都得要存 - 迭代访问数据:
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
// 输出 key 和 value
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for(String value: Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
HashSet
关于HashSet的认识:
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
- HashSet 允许有 null 值。
- HashSet 是无序的,即不会记录插入的顺序。
基本的使用方法和HashMap的差不多,不过这回里面的key不用那么着重强调了。
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Runoob"); // 重复的元素不会被添加
System.out.println(sites.contains("Taobao"));