1.ArrayList的使用
数据可重复,不排序,线程不安全
下面这个例子是将集合中的重复元素去掉:
/**
* A:案例演示
* 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)
* 思路:创建新集合方式
*/
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
list.add("c");
list.add("c");
System.out.println(list);
ArrayList newList = getSingle(list);
System.out.println(newList);
}
/*
* 去除重复
* 1,返回ArrayList
* 2,参数列表ArrayList
*/
public static ArrayList getSingle(ArrayList list) {
ArrayList newList = new ArrayList(); //创建一个新集合
Iterator it = list.iterator(); //获取迭代器
while(it.hasNext()) { //判断老集合中是否有元素
String temp = (String)it.next(); //将每一个元素临时记录住
if(!newList.contains(temp)) { //如果新集合中不包含该元素
newList.add(temp); //将该元素添加到新集合中
}
}
return newList; //将新集合返回
}
解决方案:对象重写equals方法,内部进行比较对象的属性值就可以判断是否相同元素了;
在Arrays中有个asList();可以将数组转换成集合,但是这个集合是不可以增加的;就是简单的使用集合的思想去操作数组而已;
集合嵌套,使用for循环签到遍历输出即可;
2.LinkedList的特有方法:
* public void addFirst(E e)及addLast(E e)
* public E getFirst()及getLast()
* public E removeFirst()及public E removeLast()
* public E get(int index);
* public E getFirst()及getLast()
* public E removeFirst()及public E removeLast()
* public E get(int index);
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addFirst("a"); //在头部进行添加
list.addFirst("b");
list.addFirst("c");
list.addFirst("d");
list.addLast("e"); //在尾部添加;
//System.out.println(list.getFirst()); //获取头部元素
//System.out.println(list.getLast()); //获取尾部元素
//System.out.println(list.removeFirst()); //删除头部元素
//System.out.println(list.removeLast()); //删除尾部元素
System.out.println(list.get(1)); //获取指定元素;
System.out.println(list);
}
链表查找慢,上面的get方法中是折半查找的;
3.栈和队列的数据结构:
* 栈: 先进后出
* 队列:先进先出
* 队列:先进先出
需求:请用LinkedList模拟栈数据结构的集合,并测试
public class Stack {
private LinkedList list = new LinkedList(); //创建LinkedList对象
public void in(Object obj) {
list.addLast(obj); //封装addLast()方法
}
public Object out() {
return list.removeLast(); //封装removeLast()方法
}
public boolean isEmpty() {
return list.isEmpty(); //封装isEmpty()方法
}
}
4.三种遍历集合的同时删除元素的隐患:
第一:普通的for循环遍历
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
//1,普通for循环删除,索引要--
for(int i = 0; i < list.size(); i++) {
if("b".equals(list.get(i))) {
//通过索引删除元素,--在i的后面,先删除后--;
//删除以后,所有的元素要向前移动一位;如果不做--操作的话会跳过一个元素的;
list.remove(i--);
}
}
第二:
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
Iterator<String> it = list.iterator();
while(it.hasNext()) {
if("b".equals(it.next())) {
//list.remove("b");//不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
it.remove();//使用list迭代器的remove方法;
}
}
第三:直接拨错;底层使用的也是迭代器;
//3,增强for循环,增强for循环不能删除,只能遍历
for (String string : list) {
if("b".equals(string)) {
list.remove("b");
}
}