数组和集合的区别
数组:可以存放基本类型数据以及引用类型数据,他是定长的,访问比较快,但是不会自动扩充
集合:他只能存放引用数据类型,长度不固定,可自动扩充,开发常用
Collection 单列集合的父接口
set:无序,不重复
list:有序,可重复的
无序:元素在存时候的顺序和他存进去的顺序是不一致的(这不一定是绝对的)
有序;录入元素顺序和输出数据顺序相同
set集合
1.hashset 集合
1.创建hashset对象 Collection c = new HashSet();
2.c.add("元素"); 向集合中添加元素
3.c.addAll(c2); 集合中加入另外一个集合对象
4.c.size() 获取集合长度
5.c.isEmpty() 判断集合是否为空
6.c.contains("元素") 判断接种是否包含某个元素
7.c.toArray(); 将集合转换为数组对象 因为无法确定集合是什么类型时 使用object
Object [] obj = c.toArray();
8.c.remove("元素"); 从集合中删除某个对象
9.c.remove(集合名); 清空某个集合
10.c.containsAll(c2);判断集合中是否包含某个集合
11.c.retainAll(c2);求两个集合中的交集
12.c.clear();清空集合
2.set集合
1.创建set集合对象 Collection set = new HashSet();
2.通过foreach遍历
for(Object s : set) {
System.out.println(s);
}
list集合
1.list对象
1.创建list对象 List c = new ArrayList();
2.c.add("元素"); 向集合中添加元素
3.c.add(下标,"元素"); 在列表中的指定下标位置,添加指定元素
4.c.get(2);返回指定下标位置的元素
5.c.indexOf("元素")在集合中查询元素的索引 如果不存在返回-1
6.c.remove(下标); 根据下标从集合中删除某个对象
7.c.set(要修改的元素下标,"想修改成的内容");用指定元素替换指定列表中的元素(修改)
2.arraylist对象
1.创建arraylist对象 ArrayList list = new ArrayList();
2.制定初始容量创建arraylist对象 没有默认值 ArrayList list2 = new ArrayList(10);
3.制定初始集合对象 ArrayList list3 = new ArrayList(已有arraylist对象名);
3.linkedlist对象
1.创建linkedlist对象 ArrayList list = new Linkedlist();
2.制定初始集合对象 Linkedlist list3 = new Linkedlist(已有Linkedlist对象名);
3.list6.addFirst("字符串"); 将给定元素插入此列表的开头
4.list6.getFirst() 获取第一个元素
5. list6.removeFirst(); 移除并返回此列表的第一个元素
ArrayList和LinkedList的区别
存储结构
ArrayList是线性顺序存储
LinkedList对象间彼此串联起来的一个链表
操作性能
ArrayList适合随机查询的场合
LinkedList元素的插入和删除操作性高
从功能上:LinkedList要多一些
集合遍历
迭代器 迭代集合(遍历)
1.list的迭代器有两种 iterator listiterator
2.set的迭代器只有itetator
迭代器的方法:
1.创建迭代器 Iterator 迭代器名 = 集合名 . iterator();
2.迭代器名 . hasNext() 判断是否有下一个元素
3.迭代器名 . next() 获取下一个元素
list可以通过 for foreach iterator listiterator来进行遍历
set可以通过foreach 和 itetator来进行遍历
list遍历:
List c = new ArrayList();
c.add("小A");
c.add("小B");
c.add("小C");
c.add("小D");
c.add("小E");
//for循环遍历
for (int i = 0;i<c.size();i++) {
System.out.print(c.get(i));
}
//foreach遍历
for(Object ob : c) {
System.out.print(ob);
}
//迭代器Iterator遍历
Iterator it = c.iterator();
while(it.hasNext()) {
System.out.print(it.next());
}
//迭代器ListIterator遍历
ListIterator it2 = c.listIterator();
while(it2.hasNext()) {
System.out.print(it2.next());
}
set遍历:
//通过foreach遍历
for(Object s : set) {
System.out.println("姓名:"+s);
}
//通过迭代器Iterator遍历
Iterator it = c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
collections中的的方法
1. Collections.max(集合名,null) 寻找集合中的最大值 没传递第二个参数表示默认自然排序
2.Collections.reverse(集合名); 把集合中的元素反转
3.Collections.copy(list, list2);将list2中的元素存入list中 会覆盖 原集合长度要小于目标集合 后面的要小于前面的
4.Collections.fill(集合名 ,"指定元素"); 用指定元素填充满集合
5.Collections.sort(集合名); 排序升序 小在前大在后
6.Collections.binarySearch(集合名, "查找元素");对排序后的集合进行查找 返回值为其下标
map集合
Map:双列结合(接口)
map是以键值对方式存储的,键具备唯一性,不能重复,值可重复
HashMap与Treemap的比较(面试题)
HashMap基于哈希表实现
TreeMap基于树实现,
HashMap可以通过调初始容量和负载因子,优化HashMap空间的实用
TreeMap没有调优选项,因为该树总处于平衡状态
HashMap性能优于TreeMap
1.map的方法
1. (1)创建map对象 Map map = new HashMap();
(2)创建hashmap对象 HashMap map3 = new HashMap();
1.指定初始容量定义map对象 HashMap map4 = new HashMap(长度);
2.指定初始容量定义map对象 指定加载因子 默认加载因子的值为0.75
HashMap map5 = new HashMap(长度,0.75f);
2.添加元素 map.put("键", "值");
3.将一个指定集合中内容复制到另外一个集合 map2.putAll(map); map2复制了map
4.根据键取其相对应的值 map.get("键");
5.根据指定键移除键值对 map.containsKey("键");
6.判断是否包含该值 map.containsValue("值"); 输出结果为布尔类型
7.返回的是集合的长度 map.size()
8.判断集合是否是空的 map.isEmpty()
9.获取所有的键 Set keyset = map.keySet();
10.遍历集合
for (Object key : keyset) {
//根据键找值
Object value = map.get(key);
System.out.println(key + "--"+value);
}
11.清空集合 map.clear();
2.map泛型
集合中元素类型不一致,在遍历的时候容易出现类型转换异常,所以可以在定义的时候使用泛型
<>钻石符号 是泛型的一种表现方式
HashMap<int, Student> map = new HashMap<int, Student>();
//表示键为int类型 值为student类类型