集合的概念
集合:同一类事物放在一起组成了集合;
集合是一个动态的数组区别在于数组的长度是不可变的,集合长度可变;
集合:Collection(接口)父类是 Iterable(接口:功能是集合的迭代遍历);
集合中存在的称为元素;
集合的分类
1.List(接口):有序可以重复
常见实现类:
ArrayList(数组实现) LinkedList(链表实现)
2.Set(接口):无序不重复
常见实现类:
HashSet(哈希表实现) TreeSet(二叉树实现)
//它们的父类都是Collection
ArrayList
ArrayList:实现了 List 接口(List 继承了 Collection 接口)
需要注意:当一个类实现一个接口,需要重写这个接口中的方法
ArrayList:书写格式:
ArrayList<Object>在 <>放的就是泛型,泛型指的就是集合里面放入的数据类型;泛型的好处是省去了从集合中取出数据时的强制类型转换加了泛型就会要求我们放入数据的时候,只能放入该数据类型的数据,那么取出来的时候也是这种数据类型;
下图为ArrayList书写格式:
ArrayList<Staff> name = new ArrayList<>();
name.add(new Staff("熊大",9527,35));
name.add(new Staff("熊二",9200,55));
<>中是我调用的一个类,这个类里有String、double、int类型成员变量,我们就可以在main方法中使用它用来存放名字,薪资,年龄等……
ArrayList的要点:
1.底层是数组(Object[])
2.ArrayList 元素个数 size() 方法
3.增(添加):add(元素):数组的长度和 size 不是一回事,如果size() 小于数组长度,直接将元素放入到数据类目。如果Size()等于数组长度,会自动扩容
4.删(删除):remove(索引):删除指定索引位置的元素
remove(元素):删除第一次出现的元素
5.改(修改):set(索引,元素)
6.查(查询):get(索引)
import java.util.ArrayList;
import java.util.Scanner;
public class Recruit {
public static void main(String[] args) {
ArrayList<String> staff = new ArrayList<>();
staff.add("熊大");
staff.add("熊二");
staff.add("吉吉");
System.out.println("开发部:" + staff + "共有" + staff.size() + "人");
ArrayList<String> staff1 = new ArrayList<>();
staff1.add("光头强");
staff1.add("李老板");
System.out.println("人事部:" + staff1 + "共有" + staff1.size() + "人");
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
System.out.println("这是第" + (i+1) + "个人");
System.out.println("要进哪个部门?");
String select = scanner.next();
if (select.equals("开发部")){
System.out.println("请输入你的名字:");
String name = scanner.next();
staff.add(name);
}else if(select.equals("人事部")){
System.out.println("请输入你的名字:");
String name = scanner.next();
staff1.add(name);
}else {
System.out.println("暂无这个部门,重新添加");
break;
}
}
System.out.println("开发部目前人员" + staff+ "共有" + staff.size() + "人");
System.out.println("人事目前人员" + staff1+ "共有" + staff1.size() + "人");
}
}
运行结果
hasnMap
hasnSet:(双列集合)
new HashMap<K,V>
注意事项
K 键 V值 : 键是唯一的,值可以重复
***jdk8 HashMap底层是:数组+链表+红黑树
***HashMap负载因子:0.75; 元素个数超过数组长度的0.75倍,数组就会扩容。2倍
***链表的长度超过8,链表就会转换成红黑树。如果红黑树的长度小于6,红黑树就会转换成链表
***HashMap初始长度16
书写格式
HashMap<String,Integer> 名字 = new HashMap<>();
增:
map.put(“狗”,3);
map.put(“猫”,2);
改:
map.put(“狗”,38);
查:
Integer age = map.get(“狗”);
System.out.println(age);
删:
map.remove(“狗”)
使用:
HashMap<String,String> staff = new HashMap<>();
staff.put("142702200001000X","熊大");
staff.put("1427022000032000X","熊二");
staff.put("142702200000100X","熊三");
staff.put("142702201000000X","熊四");
staff.put("14270221000000X","熊五");
staff.put("142702200000010X","熊六");
System.out.println(staff);