前者:
学习集合框架就是了解容器的数据结构(增删改查)
ArrayList的数据特点
首先ArrayList底层是一个数组,顾名(Array)思义。如数组的特点有序根据下标进行排序,元素可重复
如图所示:数组可根据下标找到指定元素,并按顺序加入排序
实战论证:
public static void main(String[] args) { List list = new ArrayList(); // 添加三个内容 list.add("A"); list.add("B"); list.add("C"); System.out.println("目前集合容器中的元素:" + list); // 查找第二个内容 System.out.println(list.get(1)); } //打印结果:B
ArrayList的三种遍历方式
public static void main(String[] args) { List list = new ArrayList(); // 添加三个内容 list.add("A"); list.add("B"); list.add("C"); // 1.fori for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } // 2.foreach for (Object o : list) { System.out.println(o); } // 3.Iterator(迭代器) Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }
LinkedList的特点
该特点:根据节点依次往下查找元素,因此查询效率比ArrayList低。因为该集合是无序的,删除该集合中的某一元素并不会对其他元素造成变化,所以在新增和删除的时候比ArryList要快
什么是堆栈与队列?
都是一种数据结构
3.1 堆栈的特点:先进后出
如图所示:
队列的特点:先进先出
如图所示:
用LinkedList完成一个堆栈容器和一个队列容器
package com.ycxw; import java.util.LinkedList; /** * 用LinkedList完成一个堆栈容器和队列容器 * * @author justz * */ public class Text_02 { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("A"); list.add("B"); list.add("C"); // 实例化堆栈对象 dui z = new dui(list); // 调用弹栈方法打印输出 System.out.println("堆栈容器:"); System.out.println(z.pop()); System.out.println(z.pop()); System.out.println(z.pop()); // 实例化队列对象 lie l = new lie(list); System.out.println("队列容器:"); System.out.println(l.duilie()); System.out.println(l.duilie()); System.out.println(l.duilie()); } } // 定义一个堆栈对象 class dui { private LinkedList ll; public dui(LinkedList ll) { super(); this.ll = ll; } // 定义一个弹栈方法pop // 当这个方法被调用时,后存进的内容要先输出,先存入的内容后输出 public Object pop() { return ll.removeLast(); } } // 定义一个队列对象 class lie { private LinkedList ll; public lie(LinkedList ll) { super(); this.ll = ll; } // 当这个方法被调用时,先存进的内容要先输出,后存入的内容后输出 public Object duilie() { return ll.remove(); } }
增长因子:
public class Text_03 { public static void main(String[] args) throws Exception { ArrayList list = new ArrayList(); //修改ArrayList(50) 默认长度就为50 list.add("1"); elementDataLength(list); } // 该方法是获取底层数组的长度 private static void elementDataLength(ArrayList l) throws Exception { Field f = l.getClass().getDeclaredField("elementData"); f.setAccessible(true); Object[] o = (Object[]) f.get(l); System.out.println("当前集合底层数组容量长度为:" + o.length); } }
去重对象:
package com.ycxw; import java.util.ArrayList; import java.util.List; public class Text_04 { public static void main(String[] args) { List list = new ArrayList(); list.add(new ikun("AA")); list.add(new ikun("BB")); list.add(new ikun("CC")); list.add(new ikun("CC")); System.out.println("目前集合容器中的元素:" + list); // 新建一个集合保存遍历旧集合的内容 List newlist = new ArrayList(); for (Object object : list) { // 判断不包含相同就添加 if (!newlist.contains(object)) { newlist.add(object); } } System.out.println("去重后集合容器中的元素:" + newlist); } } // 定义一个实体对象 class ikun { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public ikun(String name) { super(); this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ikun other = (ikun) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public String toString() { return "ikun [name=" + name + "]"; } }