List集合特点,遍历方式,ArrayList(去重原理,增长因子论,LinkedList)

for (int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

foreach遍历,代码如下

// 使用foreach遍历

for (String s : list) {

System.out.println(s);

}

迭代器iterater遍历,代码如下

// 使用迭代器遍历(和数据库取数据一样,

Iterator it = list.iterator();

while (it.hasNext()) {// 判断条件

System.out.println(it.next());// 是否有下一个

}

4.LinkedList


实现队列,特点:先进先出,一次只能取一个

实现堆栈,特点:反向输出

代码如下:

public class Demo2 {

public static void main(String[] args) {

LinkedList list=new LinkedList<>();

Dl d=new Dl(list);

d.push("a");

d.push("b");

d.push("c");

/**

  • 队列的特点 先进先出

  • 一次只能取一个

  • 堆栈的特点 反向输出

*/

System.out.println(d.pop());

System.out.println(d.pop());

System.out.println(d.pop());

}

}

//队列

class Dl{

LinkedList ll=null;

public Dl(LinkedList ll){

this.ll=ll;

}

//从容器中取元素

public String pop() {

return ll.removeFirst();//堆栈,removeLast

}

public void push(String s) {

ll.add(s);

}

}

队列输出为abc,堆栈输出为cba

5.增长因子论证


ArrayList集合底层是数组结构,他是"可变数组" 一旦超过默认数组长度,会自动扩容 扩容因子为0.5

代码如下:

public class Demo3 {

public static void main(String[] args) throws SecurityException, Exception{

ArrayList list = new ArrayList<>();

for (int i = 1; i < 101; i++) {

System.out.println(i);

list.add(i);

printgetElementDateLength(list);

}

}

private static void printgetElementDateLength(ArrayList list)throws Exception,SecurityException{

Field f=list.getClass().getDeclaredField("elementDate");

f.setAccessible(true);

Object[] elementDate =(Object[]) f.get(list);

System.out.println("目前list集合底层存储数据的数组长度:"+elementDate.length);

}

}

输出结果为:

6.List集合去重原理


判断是否重复的方法:

去重原理:

当没有写equals方法时,可以加入重复的学生对象,当写了equals方法后,equals方法被调用,不可重复增加

list.add(new Student("zs", 16));

list.add(new Student("ls", 17));

list.add(new Student("ad", 18));

if (!list.contains(new Student("ad", 18))) {

list.add(new Student("ad", 18));

}

for (Object o : list) {

System.out.println(o);

}

}

}

class Student {

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;

}

@Override

public String toString() {

return "Student [name=" + name + ", age=" + age + "]";

}

public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}

@Override

public int hashCode() {

System.out.println("hashCode方法被调用---");

final int prime = 31;

int result = 1;

result = prime * result + age;

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;

}

@Override

public boolean equals(Object obj) {

System.out.println("equals方法被调用---");

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Student other = (Student) obj;

if (age != other.age)

return false;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

相关推荐
玖釉-2 小时前
下一个排列:从字典序到原地算法的完整推导
数据结构·c++·windows·算法
枕星而眠3 小时前
数据结构八大排序详解(一):四大简单排序
c语言·数据结构·c++·后端
过期动态3 小时前
【LeetCode 热题 100】移动零
java·数据结构·算法·leetcode·职场和发展·rabbitmq
努力努力再努力wz3 小时前
【Qt入门系列】:按钮组件全解析:从 QAbstractButton 到快捷键事件、单选与复选机制
c语言·开发语言·数据结构·c++·git·qt·github
cddchina3 小时前
【Steps Recorder 和 Snipping Tool】
windows·效率工具·截图工具
Dlrb12114 小时前
数据结构-栈
数据结构··内核栈·满栈空栈·增栈减栈
我材不敲代码4 小时前
Python基础:列表详解、增删改查及常用高阶操作
开发语言·windows·python
菜菜的顾清寒5 小时前
力扣HOT100(32)二叉树的中序遍历
数据结构·算法·leetcode
KeanuReeves6 小时前
【常用操作】BAT常用脚本命令整理
windows
Shan12056 小时前
线段树入门:更新数组后处理求和查询
数据结构·算法