增删慢:静态分配内存,数组的长度是固定,存在空间闲置或者溢出现象;不适合进行插入和删除操作,需要移动大量元素。
4.4链表链表:linked list,由一系列结点node组成,结点可以在运行时动态产生。每个节点包含两个部分:数据域(data)和指向下一个节点的指针域(next)。链表包括单链表和双向链表。
单链表:链表中只有一条链子,不能保证元素的顺序(存储和取出的顺序可能不一致)
双向链表:链表中只有两条链子,有一条链子专门记录元素的顺序,是一个有序的集合。
特点:
查询慢:链表的地址不是连续的,每次查询都要从头到尾进行遍历。
增删快:动态分派内存,增/删一个节点对于链表整体结构没有影响,增删操作效率高。
4.5红黑树红黑树:R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black),它是一种弱平衡二叉树(Weak AVL)。
特点:
(1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的。 (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
注:以上数据结构可以结合所学过c语言数据结构
五:List集合体系 5.1List概述List集合体系:添加元素,是有序,可重复,有索引的,大小可变。实际开发中常用的是ArrayList集合。List集合体系包括以下几种:
ArrayList——添加元素,是有序,可重复,有索引的。
LinkedList——添加元素,是有序,可重复,有索引的。
Vector——查询快,增删慢;运行效率慢、线程安全
List集合继承了Collection集合的全部功能,同时因为List集合系列有索引,所以多了很多按照索引操作元素的方法:
add(int index, E element) 根据索引添加元素get(int index) 根据索引获取元素
remove(int index) 根据索引删除元素
set(int index, E element) 根据索引修改该位置上的元素
contains(E element)判断容器是否含有XXX东西
clear() 清空集合中的元素
size()计算集合的大小
【参考代码】
package Collection;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class TestList {
public static void main(String[] args) {
List<String>list = new ArrayList();
// 换成Linkedist 下面的操作都能一样实现
list.add("小明");
list.add("小红");
list.add("小蓝");
list.add("小绿");
list.add("小明");
// // 在某个索引位置往集合中添加元素
// list.add(2,"哈哈哈哈");
// System.out.println(list);
// // 删除集合中某个元素
// list.remove("小蓝");
// // 根据索引获取元素
// System.out.println(list.get(0));
// // 修改索引位置处的元素
// list.set(0,"小明很明白!");
// System.out.println(list.get(0));//小明很明白!
// // 计算列表的大小(长度):
// System.out.println(list.size());
// //判断列表中是否有xxx false
// System.out.println(list.contains("小蓝"));
}
} 5.2List遍历方式