前言铁子们今天分享的是集合框架list
在学习之前可以看看思维导图
目录
1、集合框架list增删改
案例
package com.tsq.list;
import java.util.ArrayList;
/**
* 对list集合容器的增删改查
* 注意:做集合元素剔除,不能够在原集合遍历的时候进行操作
* @author Administrator
*
*/
public class Demo1 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add("zs");
list.add("ls");
list.add("ww");
list.add("zl");
// 查询
System.out.println(list.get(1));
for (Object object : list) {
System.out.println(object);
}
System.out.println("--------------------");
//修改
list.set(1, "老六");
for (Object object : list) {
System.out.println(object);
}
// 删除
System.out.println("--------------------");
Object obj2 = list.remove(1);//返回值的删除元素
list.remove("ww");
System.out.println(obj2);
for (Object object : list) {
System.out.println(object);
}
// 1,2,6,9,11,8 //剔除集合中的奇数 currentModifyException
//企业中。。 调用第三方接口,要针对与一些数据做过滤
// 结论:做集合元素剔除,不能够在原集合遍历的时候进行操作
ArrayList<String> list2 = new ArrayList<>();
list2.add("1");
list2.add("2");
list2.add("6");
list2.add("9");
list2.add("11");
list2.add("8");
for (String obj : list2) {
if(Integer.valueOf(obj) % 2 ==1) {
list2.remove(obj);
}
}
}
}
效果如下
2、集合框架list 3种形式
案例如下
package com.tsq.list;
import java.util.ArrayList;
import java.util.Iterator;
import org.omg.PortableInterceptor.Interceptor;
public class Demo2 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add("zs");
list.add("ls");
list.add("ww");
list.add("zl");
//增强for循环
for (Object object : list) {
System.out.println(object);
}
System.out.println("===============");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("==========迭代器==============");
Iterator it = list.iterator();
// System.out.println(it.hasNext());
//
System.out.println(it.next());
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
效果如下
3、liskedlist 实现堆浅和队列
案例
队列如下
package com.tsq.list;
import java.util.LinkedList;
/**
* 通过linkedlist实现队列以及堆栈的容器
* @author Administrator
*
*/
public class Demo3 {
public static void main(String[] args) {
Duilie duilie = new Duilie(new LinkedList<>());
duilie.push("zs");
duilie.push("ls");
duilie.push("ww");
duilie.push("八戒");
System.out.println(duilie.pop());
System.out.println(duilie.pop());
System.out.println(duilie.pop());
System.out.println(duilie.pop());
}
}
class Duilie {
private LinkedList ll;
public Duilie(LinkedList ll) {
super();
this.ll = ll;
}
//存
public void push(Object obj) {
ll.add(obj);
}
//取
public Object pop() {
return ll.remove();
}
}
堆栈是先进后出
对列是先进先出
堆列:
package com.tsq.list;
import java.util.LinkedList;
/**
* 通过linkedlist实现队列以及堆栈的容器
* @author Administrator
*
*/
public class Demo3 {
public static void main(String[] args) {
Duizhan duilie = new Duizhan(new LinkedList<>());
duilie.push("zs");
duilie.push("ls");
duilie.push("ww");
duilie.push("八戒");
System.out.println(duilie.pop());
System.out.println(duilie.pop());
System.out.println(duilie.pop());
System.out.println(duilie.pop());
}
}
class Duizhan {
private LinkedList ll;
public Duizhan(LinkedList ll) {
super();
this.ll = ll;
}
//存
public void push(Object obj) {
ll.add(obj);
}
//取
public Object pop() {
return ll.removeLast();
}
}
4、list集合 的优化 和增加因子
* list集合如何进行优化
* 当代码中出现了多次add操作,涉及到了list集合容量多次改变,这是十分耗性能的操作,此时通过
* 设定初始化容量,即可优化性能
* list集合长度是可变的,数组长度是不可变的;
* 结论:
1、list集合底层的数据结构是数组
2、增长因子 0.5,初始容量 10
案例
package com.tsq.list;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* list集合如何进行优化
* 当代码中出现了多次add操作,涉及到了list集合容量多次改变,这是十分耗性能的操作,此时通过
* 设定初始化容量,即可优化性能
*
* list集合长度是可变的,数组长度是不可变的;
* 结论1:list集合底层的数据结构是数组
* 结论2:增长因子 0.5,初始容量 10
* @author Administrator
*
*/
public class Demo4 {
public static void main(String[] args) throws Exception {
String[] arr = new String[10];
// arr = new String[11];
// arr[11] = "zs";
// arr = new String[12];
// arr[12] = "zs";
ArrayList<Object> list = new ArrayList<>(100);
for (int i = 0; i < 200; i++) {
list.add(i);
getlen(list);
}
}
private static void getlen(ArrayList<Object> list) throws Exception {
Field f = list.getClass().getDeclaredField("elementData");
f.setAccessible(true);
Object[] elementData = (Object[]) f.get(list);
System.out.println("当前集合的元素个数:"+list.size()+";当前list集合的容量是:"+elementData.length);
}
}
5、list集合去重原理
list集合重低层原理
结论:去重引用对象时,底层调用的是对象的equals方法
案例
package com.tsq.list;
import java.util.ArrayList;
/**
* list集合重低层原理
* 结论:去重引用对象时,底层调用的是对象的equals方法
* @author Administrator
*
*/
public class Demo5 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add(new Person("老六",18));
list.add(new Person("zs",28));
list.add(new Person("ls",38));
list.add(new Person("王心凌",48));
list.add(new Person("老六",18));
System.out.println(list);//6个
ArrayList listnew = new ArrayList<>();
for (Object obj : list) {
if(!listnew.contains(obj)) {
listnew.add(obj);
}
}
System.out.println(listnew);//5个
}
}
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public Person() {
super();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
包com.heminjie.list;
导入java.util.ArrayList;
/**
* list集合重低层原理
* 结论:去重引用对象时,底层调用的是对象的equals方法
*
***
*/
公共类演示5{
公共静态空主(String[]args){
ArrayList列表=新的ArrayList<>();
//新增
增加(新人(“老六”,18));
增加(新人(“zs”,28));
增加(新人(“ls”,38));
list.add(new Person("王心凌",48));
增加(新人(“老六”,18));
System.out.println(List);//6个
ArrayList listNew=新的ArrayList<>();
For(Object obj:list){
如果(!listnew.include(Obj)){
增加(Obj);
}
}
System.out.println(Listnew);//5个
}
}
阶级人{
私有字符串名称;
私人国际年龄;
公共字符串getName(){
返回姓名;
}
公共voidsetName(字符串名){
This.name=name;
}
公共int getage(){
返回年龄;
}
公众无效年龄(INT年龄){
年龄=年龄;
}
公众人物(字符串名,整数年龄){
主题:Re:
This.name=name;
年龄=年龄;
}
@覆盖
公共字符串toString(){
返回“Person[name=”+name+“,age=”+age+“];
}
公众人士{
主题:Re:
}
@覆盖
公共布尔值等于(对象obj){
如果(这个=obj)
回归真实;
如果(obj==NULL)
还假;
If(getclass()!=obj.getClass())
还假;
他人=(人)obj;
如果(年龄!=其他年龄)
还假;
如果(name==null){
如果(其他.name=NULL)
还假;
}Else if(!name.equals(其他.name))
还假;
回归真实;
}
}
好了铁子们本次分享结束了 我们下次见 886~~~~~~~~~