java学习笔记-集合1
1.集合概述
集合是一个长度可变的容器。
集合存储:只能存储引用数据类型 不可以存储基本数据类型 如果集合要存储基本数据类型,那么必须存储他们的包装类
package com.ustc.test5;
import java.util.ArrayList;
public class list {
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
System.out.println(list1);
}
}
2. 集合体系结构
单列集合:collection 双列集合:Map
单列集合下面还有:list(可以存储重复元素) 不想保留重复元素:Set 他们都是子接口
以上都是接口,需要实现类:
list实现类:ArrayList linkedList
set实现类:HashSet TreeSet
Map集合实现类:HashMap TreeMap
3. collection集合
package com.ustc.test5;
import java.util.ArrayList;
import java.util.Collection;
public class list {
public static void main(String[] args) {
//Collection 只是一个接口
Collection<String> collection = new ArrayList<>();
collection.add("aaa");
System.out.println(collection);
collection.add("bbb");
boolean result1 = collection.remove("aaa");
System.out.println(result1);
collection.add("ccccc");
//根据条件进行删除 将长度等于3的元素全部删除
//该方法的底层会遍历集合中的元素 将每一个元素放到lambda表达式中进行判断 返回的true 进行删除
collection.removeIf(
//小括号填写参数 大括号填写条件 长度等于3 lambda表达式
(String s)->{return s.length() == 3;}
);
System.out.println(collection);
//清空集合
// collection.clear();
// System.out.println(collection);
boolean a = collection.contains('1');//判断集合中是否存在该元素
System.out.println(a);
boolean b = collection.isEmpty();//判断集合是否为空
System.out.println(b);
}
}
4. 迭代器
迭代器:集合专用遍历方式
Iteratoriterator():返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引
方法:
Boolean hasNext():判断当前位置是否有元素可以被取出
E next(): 获取当前位置的元素 将迭代器对象移向下一个索引位置
package com.ustc.test5;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class list2 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//获取迭代器对象 默认指向0索引处 泛型与集合保持一致
Iterator<String > it = list.iterator();
//利用迭代器进行遍历
System.out.println(it.hasNext()); //0索引处 有元素 打印true
System.out.println(it.next()); //取出0索引处元素
while(it.hasNext()){
System.out.println(it.next());
}
}
}
集合删除:删除一个元素 长度自动减一 后面的元素自动向前移动一个位置,所以删除相邻的相同元素,不能做到全部删除,所以这里使用迭代器进行删除
package com.ustc.test5;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class list2 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();//取出当前元素
//判断当前元素是否等于b 是的话进行删除
if("b".equals(s)){
it.remove(); //使用迭代器进行删除 不要使用集合进行删除
}
}
System.out.println(list);
}
}
5. 增强for循环
简化数组和Collection集合的遍历
1. 他是JDK5之后出现的,其内部的原理是一个iterator迭代器
2. 实现iterator接口的类才可以使用迭代器和增强for
增强for的格式:
For(元素数据类型变量名:数组或者Collection集合){
//在此处使用变量即可,该变量即为元素
}
package com.ustc.test5;
import java.util.ArrayList;
public class list3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
for(String s:list)
{
System.out.println(s);
}
}
}
增强for的注意点 :
String s是第三方变量 修改s 不会影响集合的值
package com.ustc.test5;
import java.util.ArrayList;
public class list3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
for(String s:list)
{
s= "ss";
System.out.println(s);
}
System.out.println(list);
}
}