List,linkeedlist集合介绍,特点,二者区别,增长因子,去重复
1.list集合介绍
1.2特点
2.linkedlist 和arrylist区别
3.增长因子
4.去重复
一.list集合介绍
1.集合介绍:是一种容器,用来存储数据;就好像你的书包,用来装书!
1.2.特点:a.对数据进行增删修查 b.有序集合(0开始)c.允许重复元素
a.1.对数据进行增删修查
List list =new ArrayList<>(); //增加 list.add("设计"); list.add("收复"); list.add("回复"); //删除 list.remove("回复"); //修改 list.set(1, "垃圾"); //查看 System.out.println(list);
c.1允许重复元素
3.list集合的遍历方式
a.fore b.迭代器 c.fori(通过下标)
a.1fore(加强for循环)
List list =new ArrayList<>(); //增加 list.add("设计"); list.add("收复"); list.add("回复"); for (Object object : list) { System.out.println(object); }
遍历效果图
b.2迭代器
Iterator iterator = list.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); }
遍历效果图
c.3fori(通过下标)
for (int i = 0; i <list.size(); i++) { System.out.println(list.get(i)); }
遍历效果图
二.2.linkedlist 和arrylist区别
1.ArrayList(数组)存储数据
存储过程
特点:查询,修改快(根据下标),增加删除慢;
(查询,修改)为什么快:查询就是获取原来数组那个位置下标直接查看,修改就是获得将修改元素的下标进行修改(直接在数组原上进行操作);
(增加,删除)为什么慢:删除就是获得将删除的元素下标在进行删除,增加就是在数组获得数组最后一个元素下标在进行添加,也有可能是在集合中在中间的元素进行增加,增加后所有元素往后移一位会影响效益!
2.LinkedList (链表) 存储数据
存储过程
特点:特点:查询,修改慢,增加删除快;
(增加删除)为什么快:直接打开链表,在链表进行增加操作,删除就是在链表中的元素直接删除
(查询,修改慢)为什么慢:进行查看是假如从1开始获取3,从1左右两边同时进行查询,没有就进行下一步由于有多个过程所有慢,修改同样如此!
3.推栈:先进后出 对列:先进后出
package com.lz.list; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.omg.CORBA.PUBLIC_MEMBER; public class demo2 { public static void main(String[] args) { /** * LinkedList实现 推栈 */ // 构造linkedlist 集合 LinkedList lz = new LinkedList<>(); // 添加元素 lz.add("q"); lz.add("f"); lz.add("e"); // 实例化 dz class DZ dz = new DZ(lz); // 实现一个方法 先进后出 System.out.println(dz.pop()); System.out.println(dz.pop()); System.out.println(dz.pop()); } } // 建造一个 class 定义:LinkedList lz class DZ { private LinkedList lz; // 返回函数 有参构造器 public DZ(LinkedList lz) { super(); this.lz = lz; } // 弹栈 public Object pop() { return lz.removeLast(); } }
效果图
三.增长因子(0.5)
为什么会出现增长因子?因为arrylist的默认存储长度为10而你存储的数据过于多,为了提高效益!扩容就已经很必要了!
我相信可能大家会有这样一个疑问:不是说数组长度不可变 但是arraylist底层是数组 它长度可变就不是矛盾吗?
所有说小编我给你们代码效果图
package com.lz.list; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class demo3 { public static void main(String[] args) throws Exception { /** * 增长因子 (0.5) 自动扩容 */ // 数组长度不可变 arraylist底层是数组 长度可变 // 定义数组长度为50 (50)到50时才扩容 每次是原来的1.5倍(向下取整) ArrayList list=new ArrayList<>(50); for (int i = 0; i < 100; i++) { list.add(i); System.out.print(i+"\r"); getLength(list); } } // arraylist数组长度可变 private static void getLength(ArrayList list) throws Exception, Exception { Field f = list.getClass().getDeclaredField("elementData"); f.setAccessible(true); Object[] object = (Object[]) f.get(list); System.out.println("当前数组长度: "+object.length); } }
效果图
四.去重复
1.字符串去重
package com.lz.list; import java.util.ArrayList; import java.util.List; public class demo4 { public static void main(String[] args) throws Exception { /** * 去除重复元素 */ // 1.字符串 List list = new ArrayList<>(); list.add("q"); list.add("f"); list.add("h"); System.out.println("当前原素:" + list); if (!list.contains("h")) { list.add("h"); } System.out.println("当前原素:" + list); }
效果图:
2.对象去重
package com.lz.list; import java.util.ArrayList; import java.util.List; public class demo4 { public static void main(String[] args) { //对象 List list = new ArrayList<>(); list.add(new stu("多久哦")); list.add(new stu("山东积分")); list.add(new stu("速度放缓")); System.out.println("当前原素:" + list); if (!list.contains(new stu("多久哦"))) { list.add(new stu("多久哦")); } System.out.println("现在原素:" + list); } } class stu{ private String name; public stu() { // TODO Auto-generated constructor stub } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "stu [name=" + name + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public stu(String name) { super(); this.name = name; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { //为什么 会这样原因是 equals方法返回值相关 System.out.println("送积分"); if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; stu other = (stu) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
效果图: