欢迎光临
我们一直在努力

JAVA 集合

Collection

package APIlearn;

import java.util.ArrayList;
import java.util.Collection;

public class collectiontest {
public static void main(String[] args) {
Collection<String> coll=new ArrayList<>();
coll.add("aaa");
coll.remove("aaa");
System.out.println(coll);
//coll.clear();
boolean result =coll.contains("aaa");
System.out.println(result);

Collection<Boys>boysCollection=new ArrayList<>();
Boys b1=new Boys("zhang ",12,167);
Boys b2=new Boys("li ",18,197);
Boys b3=new Boys("wang ",17,187);
boysCollection.add(b1);
boysCollection.add(b2);
boysCollection.add(b3);
Boys b4=new Boys("zhang ",12,167);
boolean result2=boysCollection.contains(b4) ;//要重写
/*
* @Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Boys boys = (Boys) o;
return age == boys.age && Double.compare(height, boys.height) == 0 && Objects.equals(name, boys.name);
}
* */
System.out.println(result2);
}

}

迭代器:

//遍历
Collection<String> colls=new ArrayList<>();
colls.add("aaa");
colls.add("bbb");
colls.add("ccc");
colls.add("ddd");
//迭代器好像一个箭头,默认指向迭代器的0索引处
Iterator<String> it = colls.iterator();
while(it.hasNext()){
String str= it.next();
//next 获取元素,并移动指针
System.out.println(str);

package APIlearn;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class collectiontest {
public static void main(String[] args) {
Collection<String> coll=new ArrayList<>();
coll.add("aaa");
coll.remove("aaa");
System.out.println(coll);
//coll.clear();
boolean result =coll.contains("aaa");
System.out.println(result);

Collection<Boys>boysCollection=new ArrayList<>();
Boys b1=new Boys("zhang ",12,167);
Boys b2=new Boys("li ",18,197);
Boys b3=new Boys("wang ",17,187);
boysCollection.add(b1);
boysCollection.add(b2);
boysCollection.add(b3);
Boys b4=new Boys("zhang ",12,167);
boolean result2=boysCollection.contains(b4) ;//要重写
/*
* @Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Boys boys = (Boys) o;
return age == boys.age && Double.compare(height, boys.height) == 0 && Objects.equals(name, boys.name);
}
* */
System.out.println(result2);

//遍历
Collection<String> colls=new ArrayList<>();
colls.add("aaa");
colls.add("bbb");
colls.add("ccc");
colls.add("ddd");
//迭代器好像一个箭头,默认指向迭代器的0索引处
Iterator<String> it = colls.iterator();
while(it.hasNext()){
String str= it.next();
//next 获取元素,并移动指针
System.out.println(str);

}
System.out.println();
// System.out.println(it.next());class NoSuchElementException extends RuntimeException {
//调用新的迭代器对象
Iterator<String> it2=colls.iterator();
while(it2.hasNext()){
String str2=it2.next();
if("bbb".equals(str2)){
it2.remove();
}

} System.out.println(colls);

}

}

增强for遍历:

package APIlearn;

import java.util.ArrayList;
import java.util.Collection;
import java.util.stream.Collectors;

public class collectionfortest {
public static void main(String[] args) {
Collection<String>coll=new ArrayList<>();
coll.add("zhang");
coll.add("wang");
coll.add("li");
//增强for,s是第三方变量
for(String s:coll){
System.out.println(s);
}

}
}

Lambda 表达式遍历:

package APIlearn;

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
import java.util.stream.Collectors;

public class collectionfortest {
public static void main(String[] args) {
Collection<String>coll=new ArrayList<>();
coll.add("zhang");
coll.add("wang");
coll.add("li");
//利用lambda
coll.forEach(new Consumer<String>() {
@Override
//s:依次表示集合里的每一个数据
public void accept(String s) {
System.out.println(s);
}
});
}
}

简化写法

package APIlearn;

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
import java.util.stream.Collectors;

public class collectionfortest {
public static void main(String[] args) {
Collection<String>coll=new ArrayList<>();
coll.add("zhang");
coll.add("wang");
coll.add("li");
//利用lambda
// coll.forEach(new Consumer<String>() {
// @Override
// //s:依次表示集合里的每一个数据
// public void accept(String s) {
// System.out.println(s);
// }
// });
// coll.forEach((String s)-> {
// System.out.println(s);
//
// });
coll.forEach((s)-> System.out.println(s)
);
}
}

补充java知识点:

1. 为什么 valueOf 对集合特别重要?(缓存机制)

这是你学集合时最该记住的一点。Integer.valueOf() 内部维护了一个缓存池(默认 -128 到 127):

java

Integer a = Integer.valueOf(100);
Integer b = Integer.valueOf(100);
System.out.println(a == b); // true(指向同一对象)

Integer c = Integer.valueOf(200);
Integer d = Integer.valueOf(200);
System.out.println(c == d); // false(超出缓存,新创建对象)

映射到集合场景:如果你的集合(比如 List、Set)里频繁存储小数字(如 ID、状态码、年龄),valueOf 会让它们复用缓存对象,而不是每次都 new 一个新对象。这在数据量大时能显著降低内存占用和 GC 压力。

对比:如果你用 new Integer(100),无论数字大小,每次都在堆里新建对象,集合越大,内存浪费越严重。


2. 除了 Integer,其他包装类也一样

  • Boolean.valueOf(true) —— 直接返回静态常量 Boolean.TRUE,根本不新建对象。

  • Character.valueOf('a') —— 也有缓存池(0~127)。

  • Long.valueOf(100) —— 同样有缓存(-128~127)。


3. 集合里经常遇到的字符串转对象

当你从配置文件、数据库或网络请求中拿到字符串,要放进集合时:

java

String numStr = "123";
List<Integer> ids = new ArrayList<>();
ids.add(Integer.valueOf(numStr)); // 显式转换

注意:valueOf(String) 会抛 NumberFormatException,所以你在集合循环里批量转换时,记得处理异常或确保数据格式干净。


4. 和 parseInt 的区别(面试爱问)

既然学集合,必须分清这两个:

方法返回类型适用集合
Integer.parseInt("123") 基本类型 int 不能直接放进集合(需手动装箱)
Integer.valueOf("123") Integer 对象 直接放进集合(且享受缓存)

所以在操作集合时,优先用 valueOf,因为它直接返回对象,并且自带缓存福利。


5. 扩展:枚举集合中的 valueOf

如果你学到 EnumSet 或 EnumMap,Enum.valueOf 也很常用:

java

EnumSet<Day> weekend = EnumSet.of(Day.valueOf("SATURDAY"));

它是将字符串转为枚举常量,确保集合里存的是单例对象(枚举天然单例)。


给你一个实战小建议

在遍历集合并进行类型转换时,可以这样写(安全且内存友好):

java

List<String> rawList = Arrays.asList("10", "20", "30");
List<Integer> intList = new ArrayList<>();
for (String s : rawList) {
// 利用 valueOf 的缓存优势
intList.add(Integer.valueOf(s));
}

唯一踩坑点:如果你传 null 给 Integer.valueOf(null),会报 NumberFormatException,所以从集合中取出元素转换前,务必先判空。

List

方法和遍历

package APIlearn;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;

public class listtest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list);
list.add(1, "qqq");
System.out.println(list);
list.remove(0);
System.out.println(list);
System.out.println();

List<Integer> list2 = new ArrayList<>();
list2.add(1);
list2.add(2);
list2.add(3);
//list2.remove(1);
Integer i = Integer.valueOf(1);

list2.remove(i);

System.out.println(list2);
String result = list.set(1, "qqq");
String result2 = String.valueOf(list2.set(0, 1));
//遍历方式5种
//创建集合并添加元素
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);

}
// list.forEach(new Consumer<String>() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// });
list.forEach((String s) -> {
System.out.println(s);
}
);

}

}

列表迭代器

hasPrevious()

previous()

boolean

如果此列表迭代器在反向遍历列表时具有更多元素,则返回 true 。

E

返回列表中的上一个元素并向后移动光标位置。

package APIlearn;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.function.Consumer;

public class listtest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list);
list.add(1, "qqq");
System.out.println(list);
list.remove(0);
System.out.println(list);
System.out.println();

List<Integer> list2 = new ArrayList<>();
list2.add(1);
list2.add(2);
list2.add(3);
//list2.remove(1);
Integer i = Integer.valueOf(1);

list2.remove(i);

System.out.println(list2);
String result = list.set(1, "qqq");
String result2 = String.valueOf(list2.set(0, 1));
//遍历方式5种
//创建集合并添加元素
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);

}
// list.forEach(new Consumer<String>() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// });
list.forEach((String s) -> {
System.out.println(s);
}
);
//列表迭代器
ListIterator<String> it5=list.listIterator();
while(it.hasNext()){
String str=it.next();
System.out.println(str);
}

}

}

赞(0)
未经允许不得转载:171主机测评 » JAVA 集合
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址