您现在的位置: 微信小程序 > 微信小程序开发 > 入门 >

【后端】java基础(4.3)java中级基础之集合——Set

来源:微信小程序 编辑:Yiyongtong.com 发布时间:2018-01-24 16:01热度:
上一章讲的数组,数组有一个特点,就是只能放相同类型值进去,那么如果我们既有字符串又有数字甚至还有对象怎么办?java似乎早就想好了给我们提供了集合(Collection).我们今天要讲的是Collection的子类——List.
List又有三个实现类:
  • ArrayList
  • LinkedList
  • Vector
这三个都是list,至于什么是子类,我们会在对象那章去普及。他们三个相同点有:
  • 都是list的实现类
  • 都是有序的,也就是可以像数组那样通过下标查找元素
  • 都没有长度限制,开辟的内存空间动态改变大小
  • 都允许出现重复元素
不同点有:
  • ArrayList底层是数组结构,在查找,修改方面的速度还有性能比较好
  • LinkedList底层链式底层结构,在添加,删除方面的速度还有性能比较好
  • Vector与ArrayList相似但是Vector是线程安全的而ArrayList的线程不安全,这点我们会在线程那章详细讲到。
我们一般最常用的还是ArrayList。
用法我们就拿ArrayList来举例说明。
  • 查询方法
    • 根据下标查询:get(下标)
      1. ArrayList list = new ArrayList();
      2. list.add("1");
      3. System.out.println(list.get(0));
    • list的下标和数组一样,也是从0开始,代表了元素在列表里的位置
  • 循环获取值
    • for循环:
      1. ArrayList list = new ArrayList();
      2. list.add("大妖怪");
      3. list.add("小妖怪");
      4. for (int i = 0; i < list.size(); i++) {
      5. System.out.println(list.get(i));
      6. }
    • for each循环:
      1. ArrayList list = new ArrayList();
      2. list.add("大妖怪");
      3. list.add("小妖怪");
      4. for (Object object : list) {
      5. System.out.println(object);
      6. }
    • iterator迭代器遍历:(这种方法无需关注底层是数组还是链式)
      1. ArrayList list = new ArrayList();
      2. list.add("大妖怪");
      3. list.add("小妖怪");
      4. Iterator it = list.iterator();  
      5. while(it.hasNext()){  
      6. System.out.println(it.next());  
      7. }
  • 修改方法
    • 根据下标修改:set(下标)
      1. ArrayList list = new ArrayList();
      2. list.add("大妖怪");
      3. System.out.println(list.get(0));
      4. list.set(0, "小妖怪");
      5. System.out.println(list.get(0));
  • 增加方法
    • 追加到list的最后:add(内容)
      1. ArrayList list = new ArrayList();
      2. for (int i = 0; i < list.size(); i++) {
      3. System.out.println(list.get(i));
      4. }
      5. list.add("大妖怪");
      6. System.out.println("==============");
      7. for (int i = 0; i < list.size(); i++) {
      8. System.out.println(list.get(i));
      9. }
    • 添加到任意位置(原来位置上的元素后移):add(下标,内容)
      1. ArrayList list = new ArrayList();
      2. list.add(1);
      3. list.add(2);
      4. list.add(3);
      5. list.add(4);
      6. for (int i = 0; i < list.size(); i++) {
      7. System.out.println(list.get(i));
      8. }
      9. list.add(2, "大妖怪");
      10. System.out.println("==========");
      11. for (int i = 0; i < list.size(); i++) {
      12. System.out.println(list.get(i));
      13. }
    • 将另一个列表添加进来:addAll(列表)
      1. ArrayList list = new ArrayList();
      2. ArrayList list1 = new ArrayList();
      3. list.add("1");
      4. list.add("2");
      5. list.add("3");
      6. list.add("4");
      7. for (int i = 0; i < list.size(); i++) {
      8. System.out.println(list.get(i));
      9. }
      10. list1.add("a");
      11. list1.add("b");
      12. list1.add("c");
      13. list1.add("d");
      14. list.addAll(list1);
      15. System.out.println("===========");
      16. for (int i = 0; i < list.size(); i++) {
      17. System.out.println(list.get(i));
      18. }
    • 将另一个列表添加到指定位置: addAll(下标,列表)
      1. ArrayList list = new ArrayList();
      2. ArrayList list1 = new ArrayList();
      3. list.add("1");
      4. list.add("2");
      5. list.add("3");
      6. list.add("4");
      7. for (int i = 0; i < list.size(); i++) {
      8. System.out.println(list.get(i));
      9. }
      10. list1.add("a");
      11. list1.add("b");
      12. list1.add("c");
      13. list1.add("d");
      14. list.addAll(2,list1);
      15. System.out.println("===========");
      16. for (int i = 0; i < list.size(); i++) {
      17. System.out.println(list.get(i));
      18. }
  • 删除方法:“
    • 删除指定元素:remove(内容),此方法对内容是int类型的无效
      1. ArrayList list = new ArrayList();
      2. list.add("1");
      3. list.add("2");
      4. list.add("3");
      5. list.add("4");
      6. for (int i = 0; i < list.size(); i++) {
      7. System.out.println(list.get(i));
      8. }
      9. list.remove("2");
      10. System.out.println("===========");
      11. for (int i = 0; i < list.size(); i++) {
      12. System.out.println(list.get(i));
      13. }
    • 根据下标删除元素:remove(下标)
      1. ArrayList list = new ArrayList();
      2. list.add("1");
      3. list.add("2");
      4. list.add("3");
      5. list.add("4");
      6. for (int i = 0; i < list.size(); i++) {
      7. System.out.println(list.get(i));
      8. }
      9. list.remove(3);
      10. System.out.println("===========");
      11. for (int i = 0; i < list.size(); i++) {
      12. System.out.println(list.get(i));
      13. }
    • 从这个列表中删除另一个列表所包含的内容:removeAll(列表)
      1. ArrayList list = new ArrayList();
      2. ArrayList list1 = new ArrayList();
      3. list.add("1");
      4. list.add("2");
      5. list.add("3");
      6. list.add("4");
      7. for (int i = 0; i < list.size(); i++) {
      8. System.out.println(list.get(i));
      9. }
      10. list1.add("1");
      11. list1.add("2");
      12. list.removeAll(list1);
      13. System.out.println("===========");
      14. for (int i = 0; i < list.size(); i++) {
      15. System.out.println(list.get(i));
      16. }
  • 其它方法:
    • 获得列表长度(元素的个数,从1开始):size()
      1. ArrayList list = new ArrayList();
      2. list.add("大妖怪");
      3. list.add("小妖怪");
      4. System.out.println(list.size());
    • 判断是否为空:isEmpty()
      1. ArrayList list = new ArrayList();
      2. list.add("大妖怪");
      3. list.add("小妖怪");
      4. System.out.println(list.isEmpty());
      5. ArrayList list1 = new ArrayList();
      6. System.out.println(list1.isEmpty());

      以上代码为list常用的方法,复制过去的报错地方记得导包。还有很多经方法在这就不列出来了,可以将光标list后面用代码提示(Alt+/)即可调出来看看: