List中对象的去重须要对标准封装类中重写hashcode和equals方法
Arraylist 和LinkedList的区别
Arraylist:底层为数组,查询快增删慢 安全有序的集合 存取有序 能存储重复元素
Linkedlist底层是链表 增删快 查询慢 安全有序集合 存取有序 能存储重复元素
linkedlist的特有的方法:
addFirst :始终添加到首位
addlist:始终添加到末尾
getFirst:获取首位
getLast:获取末尾
RemoveFirst:删除首位元素
removeLast:删除末位元素
增强for循环
for(数据类型 变量名:数组或者集合){语句体} 其中数组和集合是想要遍历的集合
数据类型是从集合中<>内的 变量名自己起
for和增强for 都是数组和集合 然而增强for 底层为迭代器
可变参数: int… i 其实就是数组(底层)
可以在可变参数的传参上 传递任意个相同类型的参数
可变参数只能放在参数末尾 一个参数列表只能有一个可变参数
static List aslict(T…a) 返回一个受指定数组支持的固定大小的列表。
其实数组工具类返回的这个List集合并不是咱们的那个List接口 他是另外的一个内部类
所以 他只是名义上看着像List集合 但是内部根本就没有add方法
ArrayList<String> al = new ArrayList<>(); al.add("lol"); al.add("pubg"); al.add("dota"); al.add("cf"); al.add("dnf"); al.add("wawa"); System.out.println(al); // 数组转集合 // 此处返回的集合 list 这两个集合虽然名字相同,但是代表的类却完全不一样 List<Integer> li = Arrays.asList(3,4,5,6,7,8,9); li.add(5);//在此处会报错 // 创建的arraylist ArrayList<Integer> al2 = new ArrayList<>(li); al2.add(10); System.out.println(al2); }
set:无序集合 存取无序 不允许有重复元素 (Hashset Treeset)
他在存储是底层依赖的是hash表结构 他的顺序按照hash排列
Treeset按照首字母的字典排序
hashset有个子类可以保证该集合有序但不常用:Linked HashSet
set集合的遍历利用迭代器或者高级for循环(其中常用高级for)
当set存储的元素为基本类型或者字符串时会自动去重
存储引用类型时(地址不同不会删除)需要对hashcode进行重写
将其他集合(q)转换为set类型(s) Hashset<> s=new hashset<>(q);
map
map接口: 双列的 将建映射到之的对象
一个映射不能包含重复的建,一个键对应一个值,一个值可以有多个键
在map操作中,主要操作键
map与collection接口不同 :
map是双列,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构值针对键有效,跟值无关
Collection集合的数据结构是针对元素有效
成员方法:
V put(K key,V value) 添加元素
V remove(Object key) 移除key 对应的 键值对
void clear() 清空map
boolean containsKey(Object key) 是否包含key
boolean containsValue(Object value) 是否包含value
boolean isEmpty() 是否为空
int size() 键值对的个数
往map集合中存储几个键值对
Set<Map.Entry<K,V>> entrySet()
返回此映射所包含的映射关系的 Set 视图。
Set keySet() 键是不可重复的
返回此映射中所包含的键的 Set 视图。
//第一种遍历方法 Set<Entry<Integer, String>> es = hs.entrySet(); // for (Entry<Integer, String> entry : es) { // System.out.println(entry.getKey() + "==="+entry.getValue()); // } Iterator<Entry<Integer, String>> iterator = es.iterator(); while (iterator.hasNext()) { Entry<Integer, String> en = iterator.next(); System.out.println(en.getKey() + "====" +en.getValue()); } // 第二种方法 先找到键 在遍历键 根据键找值 Set<Integer> keySet = hs.keySet(); for (Integer i : keySet) { System.out.println(hs.get(i)); } System.out.println("======================");
打印值的方法 Collection<V> values() 值是可以重复的 返回此映射所包含的值的 Collection 视图。 Collection<String> va = hs.values(); for (String s : va) { System.out.println(s); }