[关闭]
@liruiyi962464 2017-05-16T15:50:58.000000Z 字数 4061 阅读 453

集合

java

集合总结

List:有序且可重复

ArrayList

  • ArrayList:底层是由数组实现的,查询效率高,删除插入效率低
  1. //产生一个ArrayList容器
  2. ArrayList<String> arrayList = new ArrayList<>();
  3. //通过add(index);添加数据
  4. arrayList.add("leader");
  5. arrayList.add("leader");
  6. arrayList.add("Mahatma");
  7. //通过下标获取单个元素。get(int index);
  8. arrayList.get(下标);
  9. //删除
  10. arrayList.remove(下标);
  11. arrayList.remove(要删除的元素);
  12. //size(),indexOf(),
  13. //遍历容器ArrayList。
  14. //(1).通过get()和size();
  15. for(int i = 0;i<arrayList.size();i++){
  16. System.out.println(arrayList.get(i));
  17. }
  18. //(2).foreach循环遍历,也叫增强for循环。
  19. for (String str : arrayList) {
  20. System.out.println(str);
  21. }
  22. //(3).通过迭代器遍历。
  23. //获得迭代器。
  24. Iterator<String> it = arrayList.iterator();
  25. while(it.hasNext()){
  26. System.out.println(it.next());
  27. }

LinkedList

  • LinkedList:底层是由链表实现的,查询效率低,删除插入效率高
  1. //产生一个LinkedList容器
  2. LinkedList<String> linkedList = new LinkedList<String>();
  3. //栈:先进后出,有一个口
  4. addFirst();removeFirst();
  5. addLast();removeLast();
  6. //队列:先进先出,有两个口
  7. addFirst();removeLast();
  8. addLast();removeFirst();

Set:无序且不可重复

HashSet

  • HashSet:存放自定义的类的对象时,要重写equals()和hashCode()方法
  1. HashSet<String> hashSet = new HashSet<String>();
  2. HashSet<Person> hashSet = new HashSet<Person>();
  3. //遍历
  4. //foreach
  5. for (Person person1 : hashSet2) {
  6. System.out.println(person1);
  7. }
  8. //迭代器遍历
  9. Iterator<Person> it = hashSet2.iterator();
  10. while(it.hasNext()){
  11. System.out.println(it.next());
  12. }

TreeSet

  • TreeSet:存放自定义的类的对象时,要么该类实现Comparble接口,要么在创建容器时通过匿名内部类实现Compartor:
  1. TreeSet<String> treeSet = new TreeSet<String>();
  2. TreeSet<Person> treeSet = new TreeSet<Person>();
  3. //自定义类实现实现Comparble
  4. public int compareTo(Person o) {
  5. if(this.getAge()>o.getAge()){
  6. return 1;
  7. }else if(this.getAge()<o.getAge()){
  8. return -1;
  9. }else{if(!this.getName().equals(0.getName)){
  10. return this.getName().compareTo(o.getName());
  11. }else
  12. return 0;
  13. }
  14. }
  15. //创建容器时,由匿名内部类实现
  16. TreeSet<Person0216> treeSet = new TreeSet<Person0216>(new Comparator<Person0216>() {
  17. @Override
  18. public int compare(Person0216 o1, Person0216 o2) {
  19. // TODO Auto-generated method stub
  20. if(o1.getAge()>o2.getAge()){
  21. return 1;
  22. }else if(o1.getAge()<o2.getAge()){
  23. return -1;
  24. }else{
  25. if(!o1.getName().equals(o2.getName())){
  26. return o1.getName().compareTo(o2.getName());
  27. }else{
  28. return 0;
  29. }
  30. }
  31. }
  32. });

Map:存放的是键值对,key唯一,value可重复

HashMap

  • HashMap:
  1. HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
  2. hashMap.put(1, "a");
  3. hashMap.put(1, "b");
  4. //当俩个key一样时 覆盖旧的值
  5. //key值是唯一确定的,出现重复时覆盖旧值
  6. System.out.println(hashMap);
  7. hashMap.put(2, "c");
  8. hashMap.put(3, "c");
  9. //value可以重复
  10. System.out.println(hashMap);
  11. //遍历。
  12. //(1).通过Value值类遍历。
  13. Collection<String> values = hashMap.values();
  14. for (String str : values) {
  15. System.out.println(str);
  16. }
  17. //(2).通过Key值类遍历。
  18. Set<String> key = hashMap.keySet();
  19. for (String str : key) {
  20. System.out.println(str+"---->"+hashMap.get(str));
  21. }
  22. //(3).通过Entry(键值对)来遍历。
  23. Set<Entry<String, String>> entry = hashMap.entrySet();
  24. for (Entry<String, String> e : entry) {
  25. System.out.println(e);
  26. }

TreeMap

  • TreeMap:如果Key是自定类的对象,Key值要么实现Comparble接口,要么在创建容器时通过匿名内部类实现Compartor
  1. //添加
  2. TreeMap<String, String> treeMap = new TreeMap<>();
  3. treeMap.put("a", "tyu");
  4. treeMap.put("b", "yuio");
  5. treeMap.put("f", "yuiyj");
  6. treeMap.put("c", "ioioo");
  7. //treeMap.get(Key的值);
  8. System.out.println(treeMap.get("f"));
  9. 遍历
  10. treeMap.keySet();
  11. treeMap.values();
  12. treeMap.entrySet();
关键字 作用
Iterable 迭代器接口
Collection ( Iterble的子接口 ) 类集接口
List ( Collection的子接口 ) 列表接口
Set ( Collection的子接口 ) 数据集接口
Queue ( Collection的子接口 ) 队列
Map 键-值对组合映射表

Iterble接口和迭代器

Iterble接口

  • 允许对象成为“foreach”语句的目标
  • 类集接口Collection是Iterble的子接口
  • 方法如下
  1. //功能:返回一个在一组T类型的元素上进行迭代的迭代器
  2. Iterator<T> it = treeSet.iterator();
  3. while (it.hasNext()) {
  4. System.out.println(it.next());
  5. }

Collections类

  • 类集工具类
  • 定义了若干用于类和映射的算法,这些方法被定义为静态方法
  1. ArrayList<String> arrayList = new ArrayList<String>();
  2. arrayList.add("a");
  3. arrayList.add("d");
  4. arrayList.add("c");
  5. arrayList.add("e");
  6. arrayList.add("b");
  7. //排序
  8. Collections.sort(arrayList);
  9. System.out.println(arrayList);
  10. //查询 不存在返回-1
  11. System.out.println(Collections.binarySearch(arrayList, "123"));
  12. //反转输出
  13. Collections.reverse(arrayList);
  14. System.out.println(arrayList);
  15. //随机输出
  16. Collections.shuffle(arrayList);
  17. System.out.println(arrayList);
  18. //交换位置
  19. Collections.swap(arrayList, 1, 3);
  20. System.out.println(arrayList);
  21. //替换
  22. Collections.replaceAll(arrayList, "a" , "nishisbu");
  23. System.out.println(arrayList);
  24. //填充
  25. Collections.fill(arrayList, "123456");
  26. System.out.println(arrayList);

List、Set、Map

  • List接口扩展了Collection,特点:有序且可重复的
  • Set接口扩展了Collection,特点:无序且不可重复的
  • 映射(map)是一个存储关键字/值对的对象,给定一个关键字,可查询得到它的值;关键字和值都可以是对象,映射不是Collection的子接口,所以它本身不能使用迭代器来进行遍历
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注