Day13_Java_集合
数据结构:维护一组数据的存储和检索
假设去制定一套数据结构的规则–>接口
List
尾部添加
void add(Object);
指定位置添加
void add(int index,Object obj);
指定位置删除
Object remove(int index);
获取指定位置上的数据
Object get(int index);
修改指定位置上的数据
void set(int index,Object obj);
获得迭代器
Iterator iterator();
迭代器(接口)
判断有没有下个元素
boolean hasNext();
获取下一个元素
Object next();
从尾部删除一个元素
Object remove();
连续型的数组
指定位置添加(index):
1.先判断index是否合法,需要注意的是,index能不能取0和能不能取size index<0||index>size
2.判断原先的数组是不是满了,如果满了要扩容
3.思考数据搬移
index = 1;
for(int i=size-1; i>index; i--)
data[i] = data[i-1];
data[i+1] = data[i];
4.在index位置上赋值就可以了
5.size++
指定的位置删除(index):
1.判断index的合法性,index能不能取0,index能不能取size.if(index<0||index>size)
2.提前使用变量保存一下data[index]用于返回
3.数据搬移,搬移的顺序是正序的
index = 1;
for(int i=index; i<size-1; i++){
data[i] = data[i+1];
}
链式
链表没有索引,没有下标表示
封装一个节点对象:NOde 维护两个属性--->保存的数据,指向下一个节点
private Object data;
public Node next;
提供getset方法,提供构造器
准备好头结点:new Node(null,null);
指定位置添加:
1.验证index的合法性
2.找到index对应的节点,需要通过头结点,一层一层往下找可以准备一个临时变量curr来代替
Node curr = head;
for(int i=0; i<index; i++){
curr = curr.next;
}
3.循环完毕后current是index前一个节点
4.准备一个新的节点
Node node = new Node(obj)
5.重新定位地址的指向
node.next = curr.next();
6.size++;
指定位置删除
1.验证index的合法性
2.临时变量除了当前节点curr之外还需要当前节点的上一个pre
NOde curr = head;
Node pre = null;
3.找到index节点的位置
for(int i=0; i<=index; i++){
//先把当前节点赋给上一个节点
pre = curr;
//把当前节点的下一个节点赋值给当前节点
curr = curr.next;
}
4.需要来确认curr是谁,确认pre是谁
curr代表要删除的那个节点
pre代表要删除节点的上一个节点
5.保存一下curr里面的数据用于返回
Object temp = curr.getData();
6.修改一下地址的指向
pre.next = curr.next;
7.给当前节点置空
curr = null;
8.size++;
Collection接口:用来保存单值
List:提供一个数据可以重复的有序的集合
ArrayList
LinkedList
Vector:线程安全的可扩展数组
Set:提供一个无序且数据不可重复的集合
HashSet:使用的Hash算法进行存储
TreeSet:
SortedSet:有序(提供了比较机制下的集合)
Map:用来键值对的形式保存数据
HashMap:无序且可以值不重复
TreeMap:可以提供排序规则,Key值不重复