知道常见的集合
会集合的简单操作
特点: 存储空间可变
存储多个数据时,经常会遇到长度不固定的情况,此时,就无法使用数组进行存储,此时就需要用到集合
分为Collection和map
collection是集合,以每个元素分开储存在同一个集合
map是键值对的形式(什么是键值对?一个名字对应一个人就像这样:“z”: 1这样,"z"是键,1是值,合在一起就叫键值对)储存
set集合的元素是无序的
优点:删除和插入效率高,元素是无序的,不会引起其他元素的变化
缺点:查找效率低
举个例子方便理解:
set集合相当于是一个乱糟糟的大厅
你想在里面找某个人(查找元素),比较麻烦
但是你进去出来却不会引起什么变化
list集合是有序的,和数组类似,只不过list集合的长度是动态的
优点:查找效率高
缺点:插入删除操作效率低,会引起元素位置的变化
举个例子方便理解:
list集合就相当于一个标注着名字的会议室
你要找某个人,很轻松就可以找到
但是你要是想在里面加个座位给新来的领导,就会很麻烦
map使用键值对的形式储存数据,不算集合,但是在Java中却是整合在集合中的
ArrarList,LinkedList,HashSet,HashMap
当然,由于集合在java.util 包中,因此在使用之前应该先导包
import java.util.ArrayList;
ArrayList<类型> 变量名 = new ArrayList<>();
这里的类型只能是引用数据类型,如果想储存基本数据类型,可以装箱
常见方法,当然少不了增删改查
ArraysList.add("元素"); //在ArraysList最后面追加元素
ArrayList<String> b = new ArrayList<>();
for (int i = 0; i<10; i++){
b.add(Integer.toString(i));
}
System.out.println(b);
ArraysList.add(5, "在下标为5的位置追加引号中的内容");
ArrayList<String> b = new ArrayList<>();
for (int i = 0; i<10; i++){
b.add(Integer.toString(i));
}
b.add(5,"sja");
System.out.println(b);
ArrayList.remove(下标); //删除下标元素
ArrayList<Integer> b = new ArrayList<>();
b.add(1);
b.add(2);
b.add(3);
b.add(4);
b.add(5);
b.remove(3);
System.out.println(b);
ArrayList.set(下标); //通过下标修改元素
ArrayList<String> b = new ArrayList<>();
for (int i = 0; i < 10; i++) {
b.add(Integer.toString(i));
}
b.set(3, String.valueOf(10));
System.out.println(b);
ArrayList.get(下标); //通过下标访问元素
ArrayList<String> b = new ArrayList<>();
for (int i = 0; i < 10; i++) {
b.add(Integer.toString(i));
}
String a = b.get(3);
System.out.println(a);
}
链表是一种线性表,但是却不是按线性的顺序储存数据,而是每个节点里存到下一节点的地址(这个是不是不太好理解,下面详讲)
例子理解:
就相当于你去操场跳广播体操,每个人一小块地方,需要在指定时间內按照之前的顺序站好,你如果把那些小 块块都一个个排序好序号,然后再找,固然可以(这是数组的方法),但是也多多少少有点费事,而这个链表 就是让你记得站在你旁边的人的位置,而去找自己的位置
链表有单向链表和双向链表
单向链表:每个元素只记后面元素的位置,而不管其他
双向链表:不仅仅后面,还有前面
LinkedList和ArrayList相差不大,但是LinkedList的增删效率高,改查效率低
增删改查
LinkedList.add(); //往链表后面添加元素
LinkedList.addFirst(); //往链表开头添加元素
LinkedList.addLast(); //往链表末尾添加元素
//实操理解
LinkedList<String> te1 = new LinkedList<>();
te1.add("I");
te1.add("am");
te1.add("Smly");
System.out.println(te1);
运行结果:
//接上面的代码
te1.addFirst("hello");
te1.addLast("bye");
System.out.println(te1);
运行结果:
LinkedList.remove();
LinkedList.removeFirst();
LinkedList.removeLast();
不多做赘述
3. 改
LinkedList.set(下标, 元素); //将该下标对应的元素修改
LinkedList.get();
LinkedList.getFirst();
LinkedList.getLast();
LinkedList.size(); //返回链表大小
HashSet是set集合,元素是无序的,并且不允许有相同的元素出现
HashSet.add(); //增
HashSet.remove(); //删
HashSet.size(); //大小
HashSet.contains(); //判断元素是否存在
代码展示:
HashSet<String> ha1 = new HashSet<>();
ha1.add("Hello");
ha1.add("world");
ha1.add("!");
ha1.add("。");
System.out.println(ha1);
Boolean cunZai = ha1.contains("a");
int dax = ha1.size();
System.out.println(cunZai+" "+dax);
ha1.remove("。");
System.out.println(ha1);
是map,键值对形式存储数据,可以自由规定键值对的类型
现在讲解使用键字符串,值整型来演示
HashMap.put(键,值); //增
HashMap.remove(键); //删
HashMap.get(键); //查
HashMap.size(); //大小
HashMap.clear(); //全部删除
代码示例:
HashMap<String,Integer> hama = new HashMap<>();
hama.put("Jerry", 13);
hama.put("Jack", 16);
hama.put("Tom", 18);
hama.put("TextClear", 11111);
System.out.println(hama);
hama.remove("TextClear");
System.out.println(hama);
int age = hama.get("Tom");
int size = hama.size();
System.out.println(age+" "+size);
hama.clear();
System.out.println(hama);
多学,多练,多想;才能明白自己的水平,才能不被各种繁琐之事打扰,让我们共同勉励,成为祖国新一代的希望!——来自一个00后