文章目录
1.List集合的增删改查
1.1增删改查
package com.tft.temp;
import java.util.ArrayList;
import java.util.List;
/**
* list集合增删改查
* @author Administrator
*
*/
public class Demo01 {
public static void main(String[] args) {
//创建一个list集合
List<String> list =new ArrayList<>();
//给集合里面增加值
list.add("zs");
list.add("li");
list.add("tft");
list.add("ww");
list.add("pp");
//输出
System.out.println("增加后的集合:"+list);
//修改
list.set(0, "hh");
System.out.println("修改后的集合"+list);
//删除
String remove = list.remove(1);
System.out.println("根据下标被删除的内容"+remove);
System.out.println("删除后的内容"+list);
}
}
1.2 Arrylist与linkedList的区别
1.2.1 Arrylist
- 特点: ArrayList底层是数组
1.2.2 LinkedList
- 特点:Linkedlist的底层是链表
2.List集合的三种遍历方式
注意:遍历里面不能进行remove删除 ,会报当前改变异常
package com.tft.temp;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* List集合的三种遍历方式
* @author Administrator
*
*/
public class Demo01 {
public static void main(String[] args) {
//创建一个list集合
List<String> list =new ArrayList<>();
//给集合里面增加值
list.add("zs");
list.add("li");
list.add("tft");
list.add("ww");
list.add("pp");
//第一种方式:for循环输出
for (int i = 0; i < list.size(); i++) {
System.out.println("使用for循环输出:"+list.get(i));
}
//第二种方式:for循环加强方式输出
for (String str : list) {
System.out.println("使用for循环加强输出:"+str);
}
//第三种方式:Iterator迭代器输出
Iterator<String> iterator = list.iterator();
//判断是否有下一个值
while(iterator.hasNext()) {//代表有就执行下一步
System.out.println("迭代器输出:"+iterator.next());//输出
}
}
}
3.Linkedlist 中堆栈及队列
- 堆栈
特点: 先进后出 - 队列
特点:先进先出
package com.tft.temp;
import java.util.LinkedList;
/**
* 使用link集合创建队列/堆栈
* 堆栈特点:先进后出
* 队列特点:先进先出
* @author Administrator
*
*/
public class Demo03 {
public static void main(String[] args) {
//开始测试 队列
duilie dl=new duilie(new LinkedList<>());
//调用增加的方法
dl.push("zs");
dl.push("ls");
dl.push("hh");
dl.push("dd");
//开始取出
System.out.println("================");
System.out.println(dl.pop());
System.out.println(dl.pop());
System.out.println(dl.pop());
System.out.println(dl.pop());
//开始测试 堆栈
duizhan dz=new duizhan(new LinkedList<>());
//调用增加的方法
dz.push("zs1");
dz.push("ls1");
dz.push("we1");
dz.push("mz1");
//开始取出
System.out.println("================");
System.out.println(dz.pop());
System.out.println(dz.pop());
System.out.println(dz.pop());
System.out.println(dz.pop());
}
}
//创建一个队列类
class duilie{
private LinkedList<String> list;
//增加元素的方法
public void push(String list) {
this.list.add(list);
}
//移除元素的方法(取出/出去)
public String pop() {
return this.list.remove();
}
public LinkedList<String> getList() {
return list;
}
public void setList(LinkedList<String> list) {
this.list = list;
}
public duilie(LinkedList<String> list) {
super();
this.list = list;
}
@Override
public String toString() {
return "duilie [list=" + list + "]";
}
public duilie() {
}
}
//创建一个堆栈类
class duizhan{
private LinkedList<String> list;
//增加元素的方法
public void push(String list) {
this.list.add(list);
}
//移除元素的方法(取出/出去)
public String pop() {
return this.list.removeLast();//从最后一个开始取出即可(删除的对象)
}
public LinkedList<String> getList() {
return list;
}
public void setList(LinkedList<String> list) {
this.list = list;
}
public duizhan(LinkedList<String> list) {
super();
this.list = list;
}
@Override
public String toString() {
return "duilie [list=" + list + "]";
}
public duizhan() {
super();
}
}
4.List集合去重
注意:底层是是重写eq方法来执行去重元素
package com.tft.temp;
import java.util.ArrayList;
import java.util.List;
/**
* list集合去重
* @author Administrator
*
*/
public class Demo04 {
public static void main(String[] args) {
//案例一 创建集合 增加五个元素 要求去重并且只输出去重后的元素
List<String> list=new ArrayList<>();
//新增一个集合 来保存去重后的元素
List<String> oldList=new ArrayList<>();
//开始增加
list.add("张三");
list.add("李四");
list.add("王二");
list.add("张三");
System.out.println("去重前"+list);
//开始去重
//遍历
for (String string : list) {
//判断如果新集合不包含老集合的元素就增加到新集合
if(!oldList.contains(string)) {
oldList.add(string);
}
}
System.out.println("去重后"+oldList);
}
}
5.List集合增长因子论证、List集合如何去优化
1.list集合底层是数组
2.list集合底层数组的初始化容量是10、增长因子是0.5
3.list集合进行优化、只需要扩大初始化容量、减少扩容的次数、进一步提到性能
问:数组的长度是不可变的、可list集合为何能无限制的添加元素? 答:数组容量达到上限会进行扩容
有意识的设置初始化容量
package com.tft.temp;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* List集合增长因子论证、List集合优化
* @author Administrator
*
*/
public class Demo05 {
public static void main(String[] args) {
//创建一个集合
ArrayList<Integer> arr=new ArrayList<>();
//循环增加100次
for (int i = 0; i < 50; i++) {
arr.add(i);
try {
getElementDataLength(arr);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static void getElementDataLength(ArrayList<Integer> arr) throws Exception, SecurityException {
//拿到List集合属性对象
Field f = arr.getClass().getDeclaredField("elementData");
//打开属性的设置权限
f.setAccessible(true);
//拿到数组对象
Object[] ob = (Object[])f.get(arr);
//测试
System.out.println("容器中的元素个数:"+arr.size()+"容器中的元素大小:"+ob.length);
}
}