集合类
1.特点
提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变。
ArrayList
main方法里
ArrayList<String> arr = new ArrayList<>();
arr.add("hello");//添加
arr.add("world");//添加
arr.add("Java");//添加
arr.remore("world");//删除
arr.remore(0);//删除
arr.set(2,“JavaEE”);//修改
System.out.print(arr.get(2));//返回指定索引处元素
arr.size();//返回元素个数
2.体系结构
集合 接口和实现类
- Collection 单列
1.1 List 可重复
1.1.1 ArrayList
1.1.2 LinkedList
1.1.3 …
1.2 Set 不可重复
1.2.1 HashSet
1.2.2 TreeSet
1.2.3 … - Map 双列
2.1 HashMap
2.2 …
3.Collection
- 创建Collection集合的对象(多态的方式)
Collection<Strinig> c = ArrayList<>();
c.add("hello");//添加
c.add("world");//添加
c.add("Java");//添加
c.remore("world");//删除
//c.clear();//清空
c.contains("Java");//是否包含
c.isEmpty();//是否为空
c.size();//长度
- Iterator:迭代器
next():返回下一元素
hasNext:有元素 返回true
Collection<Strinig> c = ArrayList<>();
c.add("hello");//添加
c.add("world");//添加
c.add("Java");//添加
Iterator<String> it = c.iterator();
while(it.hasNext()){
System.out.print(it.next());
}
4.List
- 特点:
- 有序:存储和取出的顺序一致
- 可重复:存储的元素可以重复
特有方法(指定索引)
for循环遍历
List<Strinig> c = ArrayList<>();
c.add("hello");//添加
c.add("world");//添加
c.add("Java");//添加
for(int i=0; i<c.size();i++){
System.out.print(c.get(i));
}
并发修改异常(迭代器导致,可用for替代)
ListIteeator:列表迭代器(List集合特有)
增强for
- 子类
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快
LinkedList特有方法
addFirst()
addLast()
getXxx()
removeXxx()
5.Set
- 特点
- 不包含重复元素的集合
- 没有带索引的方法,所以不能使用普通for
- HashSet
对集合的迭代顺序不作任何保证
哈希值:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值Object类中可以获取哈希值(hashCode():返回对象的哈希码值)
特点:
a.底层数据结构是哈希表
b.对集合的迭代顺序不作任何保证
c.没有带索引的方法,所以不能普通for
d.由于Set集合,不能包含重复元素
保证对象元素的唯一性,需要重写equals()和hashCode()方法。 - LinkedHashSet
特点:
a.哈希表和链表实现Set接口,具有可预测的迭代顺序
b.由链表保证元素有序,存储和取出顺序一致
c.由哈希表保证唯一,不重复 - TreeSet
特点:
a.元素有序,按照一定规则排序,取决于构造方法
TreeSet():自然排序
TreeSet(Comparator comparator):指定比较器排序
b.没索引,不普通
c.Set集合,不重复
集合存储的是引用类型,所有的基本类型用对应的包装类类型。
自然排序Comparable的使用:
无参构造
TreeSet< student > ts = new TreeSet<>();
实现Comparable接口,重写compareTo(To)方法
implements Comparable < Student >{
public int compareTo(Student s){
int num = this.age - s.age;//从小到大,1(this当前元素,s上个元素)
num2 = num == 0 ? this.name.compareTo(s.name):num;//姓名(字符串实现了接口,本身就可以自然排序)
return num2;
}
}
比较器的使用:
让集合构造方法接收Comparator的实现类对象,重写compare(To1,To2)方法
TreeSet< student > ts = new TreeSet<>(new comparator(){
public int compare(Student s1,Student s2){
//this.age - s.age
//s1,s2
int num = s1.getAge() - s2.getAge();//从小到大,1(this当前元素,s上个元素)
num2 = num == 0 ? s1.getName().compareTo(s2.getName()):num;//姓名(字符串实现了接口,本身就可以自然排序)
return num2;
}
});
6.Map
特点:
Interface Map< K,V > K:键的类型,V:值的类型
将键映射到值的对象;不能包含重复的键,每个键可以映射到最多一个值
Map<String,String> map =new HashMap<String,String>();
map.put("1","test");
map.put("2","test2");
map.put("3","test3");
map.remove("3");
//map.clear();
map.containsKey("1");
map.containsValue("test");
map.isEmpty();
map.size();
//hashMap重写了toString方法
System.out.println(map);//输出集合对象
Map<String,String> map =new HashMap<String,String>();
map.put("1","test");
map.put("2","test2");
map.put("3","test3");
//根据键获取值 //未找到键返回null
map.get("1");
//获取所有键的集合
Set<String> keySet = map.keySet();
//获取所有值的集合
Collection<String> values = map.values();
遍历
方式一
键找值遍历:
Map<String,String> map =new HashMap<String,String>();
map.put("1","test");
map.put("2","test2");
map.put("3","test3");
//获取所有键的集合
Set<String> keySet = map.keySet();
for(String key : keySet){
String value = map.get(key);
System.out.println(key+","+value);
}
** 方式二 **
按照键值对对象找键和值遍历:
获取所有键值对对象的集合
Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
遍历键值对对象的集合,得到每一个键值对对象
用增强for实现,得到每一个键值对的对象
根据键值对对象获取键和值
用getKey()得到键
用getValue()得到值
Map<String,String> map =new HashMap<String,String>();
map.put("1","test");
map.put("2","test2");
map.put("3","test3");
Set<Map.Entry<String,String>> entrySet = map.entrySet();
for(Map.Entry<String,String> m : entrySet){
String key = m.getKey();
String value = m.getValue();
System.out.println(key+","+value);
}
集合嵌套 外=》内
Collections 是针对集合操作的工具类
常用方法:
Collections.sort(list);//升序
Collections.reverse(list);//反转
Collections.shuffle(list);//洗牌