1.Collection接口
public interface Collection<E> extends Iterable<E> {
public int size();//集合元素的个数
public boolean isEmpty();//集合是否为空
public boolean contains(Object obj);//包含指定元素
public Iterator<E> iterator();//获取集合的迭代器
public Object[] toArray();//把集合转为对象数组
public void add(E);//添加元素的方法
public void remove(Object);//删除指定元素
public void clear();//清空集合所有元素
public Spliterator<E> spliterator();//新的迭代器
public Stream stream();//获取去流
public Stream<E> parallelStream();//获取并行流
}
2.List接口
特点:
有序,有下标,可以重复
常见的两个实现类:
ArrayList LinkedList
ArrayList是基于数组,LinkedList是基于双向链表
LinkedList增删快
ArrayList查询修改快
简单的增删改查:
public static void main(String[] args) {
ArrayList list = new ArrayList();
//增删改查
list.add(888.0);
list.add(999);
list.add(1, 666);//
list.set(1, 333);//改
list.remove(0);//通过下标删除
list.remove((Integer)666);//删除Integer类型需要强转,不然会识别为下标
list.remove(888.0);
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
for(Object num:list) {
System.out.println(num);
}
System.out.println(list.toString());
}
泛型
限制数据类型
ArrayList<Integer> list = new ArrayList<>();
3.Set接口
3.1 HashSet类
无序无下标,不能重复
判断两个对象是否重复:
hashCode判断是否再同一个桶中,在同一个桶中,通过equals判断是不是同一个对象
3.2 TreeSet
TreeSet的底层是一个平衡二叉树
有两种排序:
自然排序:
让放进集合中对象实现Comparable接口---重写compareTo方法
自定义排序:
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();
}
});
可以两个都写,自定义排序优先
ts.add(new Student("张三丰",20));
ts.add(new Student("宋远桥",16));
ts.add(new Student("俞岱岩",15));
ts.add(new Student("张翠山",16));
ts.add(new Student("宋远桥",16));
System.out.println(ts);
3.3 LinkedHashSet
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("adfda");
set.add("dfafd");
set.add("dewqr");
set.add("utiu");
set.add("fdaf");
System.out.println(set);
4. 迭代器
单值集合都有迭代器
Iterator<String> itor = set.iterator();
while(itor.hasNext()) {
System.out.println(itor.next());
}
反向迭代器
ListIterator<Worker> lit = workers.listIterator(workers.size());
while(lit.hasPrevious()) {
Worker worker = lit.previous();
if(worker.getName().equals("李四")) {
lit.add(new Worker("赵六",33,10000,7));
}
if(worker.getName().equals("王五")) {
lit.remove();
}
}
5.Map接口
Map:映射
key---value 键值对
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
//增
map.put("cn", "China");
map.put("us", "America");
map.put("jp", "Japan");
map.put("fr", "France");
//修改
map.put("jp", "jjj");
//删
map.remove("jp");
map.remove("jp", "jjj");//为了安全
System.out.println(map);
//循环键---最常用
Set<String> keySet = map.keySet();
for(String k:keySet) {
System.out.println(k+"-"+map.get(k));
}
//循环值
Collection<String> values = map.values();
for(String v:values) {
System.out.println(v);
}
//循环键值对
Set<Entry<String, String>> es = map.entrySet();
for(Entry<String, String> kv:es) {
System.out.println(kv.getKey()+" "+kv.getValue());
}
System.out.println("-----------------------------------");
//迭代器实现键值对的遍历
Iterator<Entry<String, String>> itor = es.iterator();
while(itor.hasNext()) {
Entry<String, String> kv = itor.next();
System.out.println(kv.getKey()+" "+kv.getValue());
}
}
//输入一个字符串,统计所有字母出现的次数,(位置--扩展)
String str = "kdjflksajlkfjalkjfalkjflkajlkfjlkafhkah";
//出现次数
public class TestString {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
System.out.print("请输入字符串:");
String str = input.next();
for (int i = 0; i < str.length(); i++) {
System.out.print(str.charAt(i)+"-");
char ch = str.charAt(i);
Integer count = 0;
if(hm.containsKey(ch)) {
count = hm.get(ch);
count++;
hm.put(ch,count);
}else {
hm.put(ch, 1);
}
}
System.out.println(hm);
}
}
//出现的下标
public class TestString {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
HashMap<Character, List<Integer>> hm = new HashMap<>();//找下标
System.out.print("请输入字符串:");
String str = input.next();
for (int i = 0; i < str.length(); i++) {
System.out.print(str.charAt(i)+"-");
char ch = str.charAt(i);
//Integer count = i;
if(hm.containsKey(ch)) {
hm.get(ch).add(i);
}else {
hm.put(ch,new ArrayList<Integer>());
hm.get(ch).add(i);
}
}
System.out.println(hm);
}
}