publicstaticvoidmain(String[] args){//菱形语法ArrayList<Integer> list =newArrayList<>();
list.add(1);
list.add(4);
list.add(2);for(Integer integer : list){System.out.println(integer);}//使用迭代器遍历Iterator<Integer> it = list.iterator();//判断是否有下一个元素while(it.hasNext()){int i = it.next();System.out.println(i);}}
3.LinkedList
3.1双向链表实现
publicclassMyLinkedList<E>{/**
* 链表元素个数
*/privateint size;/**
* 链表首节点
*/privateNode first;/**
* 链表尾结点
*/privateNode last;/**
* 默认构造创建一个空链表
*/publicMyLinkedList(){
first =null;
last =null;
size =0;}/**
* 在链表末尾添加元素
* @param e
*/privatevoidlinkLast(E e){if(first==null||last==null||size==0){//说明链表为空链表//1.创建新节点//2.新节点指为first//3.新节点指为lastNode<E> newNode =newNode(null,e,null);
first = newNode;
last = newNode;}else{//1.创建新节点Node<E> newNode =newNode(last,e,null);//2.将last节点指向新节点
last.next = newNode;//3.将新节点改为last
last = newNode;}
size++;}/**
* 在链表首部添加节点
* @param e
*/privatevoidlinkFirst(E e){if(first==null){//1.创建新节点Node<E> newNode =newNode<E>(null, e,null);
first = newNode;
last = newNode;}else{Node<E> newNode =newNode<E>(null, e, first);
first.pre = newNode;
first = newNode;}
size++;}/**
* 在节点之前添加节点
* @param index
* @param e
*/privatevoidlinkBefore(int index,E e){chcekRange(index);//1.创建新节点Node<E> node =newNode(null,e,null);//2.找到索引处的节点Node<E> indexNode =getNodeByIndex(index);//3.找到索引处的前置节点Node<E> pre = indexNode.pre;//4.新节点指向前置节点
node.pre = pre;//5.前置节点指向新节点
pre.next = node;//6.新节点指向索引处节点
node.next = indexNode;//7.索引处pre指向新节点
indexNode.pre=node;
size++;}/**
* 在某个节点后插入新节点
* @param index
* @param e
*/privatevoidlinkAfter(int index,E e){chcekRange(index);//1.获取当前索引处的节点Node<E> indexNode =getNodeByIndex(index);//2.获取索引处后置节点Node<E> next = indexNode.next;//3.创建新节点Node<E> newNode =newNode(indexNode,e,next);//4.索引处节点指向新节点
indexNode.next = newNode;//5.索引处节点的后置节点指向新节点
next.pre = newNode;
size++;}/**
* 链表中添加节点,默认添加在尾部
* @param e
*/publicvoidadd(E e){linkLast(e);}/**
* 在指定索引处后面添加节点
* @param index
* @param e
*/publicvoidadd(int index,E e){linkAfter(index, e);}/**
* 删除索引处节点
* @param index
* @return
*/publicbooleanremove(int index){chcekRange(index);if(index==0){Node<E> removeNode = first;
first = first.next;
first.pre =null;
removeNode.next=null;}elseif(index==size-1){Node<E> removeNode = last;
last = last.pre;
last.next =null;
removeNode.pre =null;}else{//1.找到索引处的节点Node<E> indexNode =getNodeByIndex(index);//2.找到索引处的后置Node<E> next = indexNode.next;//3.找到索引处的前置节点Node<E> pre = indexNode.pre;//4.将索引处前置节点的next指向索引处后置节点
pre.next = next;//5.将索引处后置节点的pre指向索引处前置节点
next.pre = pre;//6.减少元素个数}
size--;returntrue;}/**
* 根据索引获取元素
* @param index
* @return
*/publicEget(int index){chcekRange(index);Node<E> node =getNodeByIndex(index);return node.data;}/**
* 修改索引处的值
* @param index
* @param e
*/publicvoidset(int index,E e){chcekRange(index);Node<E> current = first;for(int i =0; i < size&¤t!=null;i++,current = current.next){if(i==index){
current.data = e;}}}/**
* 清空链表
*/publicvoidclear(){
first =null;
last =null;
size=0;}/**
* 链表是否为空
* @return
*/publicbooleanisEmpty(){return size==0;}/**
* 根据传入的索引找到节点
* @param i
* @return
*/privateNode<E>getNodeByIndex(int index){//判断索引越界if(index<0||index>size){thrownewIndexOutOfBoundsException("访问越界");}if(index==0){return first;}elseif(index==size-1){return last;}else{Node<E> current = first;for(int i =0; i < size&¤t!=null; i++){if(i==index){return current;}
current = current.next;}}return first;}/**
* 判断访问是否越界
* @param index
*/publicvoidchcekRange(int index){if(index<0||index>size-1){thrownewIndexOutOfBoundsException("访问越界");}}/**
* 打印链接
*/@OverridepublicStringtoString(){if(size==0){return"[]";}Node<E> current = first;StringBuffer sb =newStringBuffer("[");for(int i =0; i < size&¤t!=null; i++,current=current.next){
sb.append(current.data);if(i!=size-1){
sb.append(",");}}
sb.append("]");return sb.toString();}/**
* 定义非静态内部类表示节点
* @author MR.W
*
* @param <E>
*/classNode<E>{Node<E> pre;E data;Node<E> next;publicNode(Node<E> pre,E data,Node<E> next){super();this.pre = pre;this.data = data;this.next = next;}}}
3.2 方法
方法
描述
add(Object o)
添加数据
add(int index,Object o)
在制定索引处添加元素
size()
获取元素个数
get(int index)
获取索引处的元素
isEmpty()
判断集合是否为空
indexOf(Object o)
判断某个元素第一次出现的位置
E remove(int index)
移除索引处元素,并返回该元素
boolean remove(Object o)
移除元素
clear()
清空元素
set(int index ,E e)
修改索引处的元素
addFirst(E e)
链表首部添加元素
addLast(E e)
链表末尾添加元素
removeFirst()
移除首节点
removeLast()
移除尾节点
getFirst()
获取第一个节点
getLast()
获取最后一个几点
二.Set接口
1.特点
无序
无索引
不可重复
2.HashSet
2.1方法
方法
描述
add(Object o)
添加元素
remove(Object o)
移除元素
isEmpty()
判断元素是否为空
2.2.HashSet遍历
publicclassTest{publicstaticvoidmain(String[] args){Set<String> set =newHashSet<>();//添加元素
set.add("陈忠实");
set.add("贾平凹");
set.add("路遥");
set.add("张爱玲");
set.add("林徽因");boolean a = set.add("徐志摩");System.out.println(a);boolean b = set.add("徐志摩");System.out.println(b);//foreachfor(String s : set){System.out.println(s);}//iteratorIterator<String> it = set.iterator();while(it.hasNext()){String s = it.next();System.out.println(s);}}}