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;

相关推荐
IT枫斗者8 分钟前
集合工具类
java·linux·数据库·windows·算法·microsoft
朱皮皮呀14 分钟前
排序算法-归并排序
数据结构·算法·排序算法·归并排序
jyan_敬言24 分钟前
虚拟机centos_7 配置教程(镜像源、配置centos、静态ip地址、Finalshell远程操控使用)
linux·运维·服务器·c语言·数据结构·tcp/ip·centos
UrSpecial27 分钟前
【数据结构取经之路】图解AVL树
数据结构
QXH20000028 分钟前
数据结构—顺序表
数据结构
洪大宇33 分钟前
成型的程序
windows
fhvyxyci4 小时前
【数据结构初阶】顺序结构二叉树(堆)接口实现超详解
c语言·数据结构
禁默7 小时前
list从0到1的突破
数据结构·c++·list
laocooon5238578867 小时前
一个线性筛的多功能组合:筛法求质数+约数个数+约数和
数据结构·c++·算法
银氨溶液9 小时前
MySQL底层为什么选择用B+树作为索引
数据结构·数据库·b树·mysql·面试·b+树