List接口相对collection的特殊方法
1、添加
关键词:add(index , 元素)
代码示例:
list.add(6,"ning");
分析:注意这里的add中的index不能越界,最多取到list.size()的角标
2、删除
关键词:remove( index)
代码示例:
list.remove(1);
分析:这里的index最多只能取到list.size()-1的角标
3、设置
关键词:set(index , 元素)
代码示例:
list.set(1, "zhoujielun");
分析:这里的index角标最多也只能取到list.size()-1的位置
4、获取
关键词:get (index)
代码示例:
Object object = list.get(2);
分析:注意这里的get()方法的返回值是Object类型的,需要一个Object接收
需求:在集合中存储"a""a""a""b""b""b""c""c""c" 要求去除重复元素
思路:可以设置另一个集合来接收原集合的数据,使用迭代器进行遍历,然后使用contains关键字进行判断
代码分析:
ArrayList arrayList1 = new ArrayList();
arrayList1.add("a");
arrayList1.add("a");
arrayList1.add("a");
arrayList1.add("b");
arrayList1.add("b");
arrayList1.add("b");
arrayList1.add("c");
arrayList1.add("c");
arrayList1.add("c");
ArrayList list9 = new ArrayList();
Iterator iterator2 = arrayList1.iterator();
while(iterator2.hasNext()) {
Object next = iterator2.next();
if(!list9.contains(next)) {
list9.add(next);
}
}
System.out.println(list9);
分析:在遍历的代码中,一定注意不能出现两次next(),否则指针就会向下移动两次,就会少比较数值
拓展需求:如何去除重复对象?
思路:contains方法的核心是equals,并且equals的实质又是地址值之间的比较,在这里不同的对象有不同的地址值,因此使用地址值进行判断没有意义
在这里需要将equals的方法重写,换成我们需要的,并且重写tostring方法
代码分析:
ArrayList arrayList3 = new ArrayList();
arrayList3.add(new Man("kobi", "insist"));
arrayList3.add(new Man("kobi", "insist"));
arrayList3.add(new Man("james", "fight"));
arrayList3.add(new Man("james", "fight"));
arrayList3.add(new Man("jordan", "exe"));
arrayList3.add(new Man("jordan", "exe"));
ArrayList arrayList4 = new ArrayList();
Iterator iterator3 = arrayList3.iterator();
while (iterator3.hasNext()) {
Man man = (Man)iterator3.next();
if(!arrayList4.contains(man)) {
arrayList4.add(man);
}
}
System.out.println(arrayList4);
Vector类的特殊方法
1、向末尾添加元素
关键词:addElement()
代码示例:
vector.addElement("a");
2、
关键词:elements
作用:用于返回集合的枚举,用于使用枚举遍历集合
代码示例:
Vector vector = new Vector();
vector.add("wangning");
vector.add("wangning");
vector.add("wangning");
Enumeration elements = vector.elements();
while (elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}
LinkedList类的特殊方法
1、指定添加首尾元素
关键词:addFirst() addLast()
代码示例:
linkedList.addFirst("d");
linkedList.addLast("e");
2、删除首尾元素
关键词:removeFirst() removeLast()
代码示例:
linkedList.removeFirst();
linkedList.removeLast();
3、获取首尾元素
关键词:getFirst() getLast()
代码示例:
linkedList.getFirst();
linkedList.getLast();
注意:这里的get方法需要一个 object来接收
需求:如果数组中有"b"这个元素,就添加 “Oh-Yes”这个元素
思路:如果使用正常的迭代器的话,在循环中会出现并发编程异常的情况,需要使用LinkedList类的特殊迭代器 listiterator()
代码分析:
LinkedList linkedList = new LinkedList();
linkedList.add("wangning");
linkedList.add("ning");
linkedList.getFirst();
linkedList.getLast();
ListIterator listIterator2 = linkedList.listIterator();
while (listIterator2.hasNext()) {
if(listIterator2.next().equals("ning")) {
listIterator2.add("wangning");
}
}
System.out.println(linkedList);
ArrayList和LInkedList的区别
分别是通过数组和链表实现
数组和链表的特点和区别
数组:查询块,增删慢
特点:连续的
数组在初始化的时候会默认分配十个空间,一旦不够用以*1.5倍的方式新建数组
查询快:由于元素跟角标一一对应,可以很快得到指定 角标的值
增删慢:增加一个元素,需要将后面的元素整体向后位移一位。删除一个元素,需要将后面所有的元素整体向前位移一位
链表:查询慢,增删快
特点:碎片化的,不连续的,每一个元素保存上一个元素和下一个元素的地址
查询慢:先判断元素角标处于前半部分还是后半部分,然后从头部或者尾部进行查找
增删快:增加一个元素,只需要在指定位置添加元素,元素中保存上一个和下一个元素的地址,上下的元素也保存它的地址
删除一个元素,将元素删除,上下元素各自保存对方的地址
栈结构和队列结构
栈结构:先入后出,
举例:程序中,如果主函数进入栈后立即出栈,main函数中的方法没有意义
队列结构:先入先出
举例:这就相当于按顺序排队,先排队的先运行,自然也就先结束