Iterable所有超级接口
iterator()-获得迭代器
迭代器的方法:1.hasNext() 2.next() 3.remove
Collection(I):集合 存放多个元素,没有大小限制
一.LIst(I):线性结构 有序列表(顺序索引index)
a.ArrayList顺序结构(基于数组实现)
连续空间->空间浪费 带下标->查找可以快速定位 插入/删除->做大量移动,效率低
方法有
1.add(int index,object o){
if(size==data.length){//判断index是否合法,判断是否扩容
data=Arrars.copyOf(data,(data.length+1)*2)//长度直接增加一倍(数组复制)
}
for(int i=size;i>index;i–){//从index开始的每一个元素后移一位
data[i]=data[i-1];
}
data[index]=o;//在index位置上放入元素
size++;元素+1//
}
2.boolean add(object o){
add(size,o);
return true;
}
3.Object remove(int index){//返回所删除的元素
if(index<size&&index>=0){
Object obj=data[index];//获取要返回的元素
for(int i=index;i<size-1;i++){
data[i]=data[i+1];
}
size–;
return obj;
}
return null;
}
4. boolean remove(Object o){
for(int i=0;i<data.length;i++){
if(data[i].equals(o)){
remove(i);
return true;
}
}
return false;
}
5.String toString(){
StringBuilder sb=new StringBuilder("[");
for(int i=0;i<size;i++){
sb.append(data[i]+",");
}
sb.append("]");
sb.delete(sb.length()-2;sb.length()-1);
return sb.toString();
}
6.Object get(int index)
7.Object set(int index,Object o)//返回被替换的元素
8.clear()
9.size()
10.isEmpty()
b.LinkedList 链表结构(基于节点实现)
不需要连续空间->空间利用率
不带下标->查找next/prev,效率低
插入/删除->改变前后节点指向,效率高 隐含操作->查找
内部类:
class Node{
Object data;//存放数据
Node next;//指向下一个节点
}
方法:
1. boolean add(Object o){向最后添加元素
Node node=head;
while(node.next!=null){//找到当前列表最后一个节点
node=node.next;
}
Node newNode=new Node();
newNode.data=0;
node.next=newNode;
size++;
return true;
}
2.add(int index,Object o){//在index位置上插入o元素
if(index<=size&&index>=0){
Node node=preNode(index);
Node newNode=new Node();
newNode.data=o;
newNode.next=preNode.next;
preNode.next=newNode;
size++;
}
}
3.Object remove(int index){
Node n1=preNode(index):
Object obj=n1.next.data;
n1.next=n1.next.next;
size–;
return obj;
}
4.boolean remove(object o){
Node node=head;
while(true){
if(node.next.data.equals(o){
node.next=node.next.next
break;
}
node=node.next;
}
return true;
}
5.String toString(){
StringBuilder sb=new StringBuilder("[");
Node node=head;
while(node.next!=null){
node=node.next;
sb.append(node.data+",");
}
sb.append("]");
sb.delete(sb.length()-2,sb.length()-1);
return sb.toString();
}
6. Node preNode(int index){//获得前一个节点
Node node=head;
for(int i=0;i<index;i++){
node=node.next;
}
return node;
}
7. Object get(int index){
Node node =preNode(index);
return node.next.data;
}
8.Object set(int index,Object o)
9.clear()
10.isEmpty();
c.Vector(c)