List常见用法

类型

  1. ArrayList(长于随机访问元素,但是在中间插入和删除元素时较慢)
  2. LinkList(优化了顺序访问,在随机访问方面相对较慢,特性集较ArrayList更大)

例子

    public static void print(String s){
        System.out.println(s);
    }

//  Random rand = new Random(47);
//  List<Pet> pets = Pets.arrayList(7);
    public static void main(String args[]){
        Random rand = new Random(47);
        List<String> pets = new ArrayList();
        pets.add("Rat");
        pets.add("Manx");
        pets.add("Cymric");
        pets.add("Mutt");
        pets.add("Pug");
        pets.add("Cymric");
        pets.add("Pug");
        print("1: "+pets);
        pets.add("Hamster");
        print("2: "+pets);
        print("3: "+pets.contains("Hamster"));
        pets.remove("Hamster");
        String p = pets.get(2);
        print("4: "+p+" "+pets.indexOf(p) );
        String cymric = "Cymric";
        print("5: "+pets.indexOf(cymric));
        print("6: "+pets.remove(cymric));
        print("7: "+pets.remove(p));
        print("8: "+pets);
        pets.add(3,"Mouse");
        print("9: "+pets);
        List<String> sub = pets.subList(1, 4);
        print("subList: "+sub);
        print("10: "+pets.containsAll(sub));
        Collections.sort(sub);
        print("sorted subList: "+sub);
        print("11: "+pets.containsAll(sub));
        Collections.shuffle(sub,rand);
        print("shuffle subList: "+sub);
        print("12: "+pets.containsAll(sub));
        List<String> copy = new ArrayList<String>(pets);
        sub = Arrays.asList(pets.get(1),pets.get(4));
        print("sub: "+sub);
        copy.containsAll(sub);
        print("13: "+copy);
        copy = new ArrayList<String>(pets);
        copy.remove(2);
        print("14: "+copy);
        copy.removeAll(sub);
        print("15: "+copy);
        copy.set(1, "Mouse");
        print("16: "+copy);
        copy.addAll(2,sub);
        print("17: "+copy);
        print("18: "+pets.isEmpty());
        pets.clear();
        print("19: "+pets);
        print("20: "+pets.isEmpty());   
    }

//output
/*
 5: 2
1: [Rat, Manx, Cymric, Mutt, Pug, Cymric, Pug]
2: [Rat, Manx, Cymric, Mutt, Pug, Cymric, Pug, Hamster]
3: true
4: Cymric 2
5: 2
6: true
7: true
8: [Rat, Manx, Mutt, Pug, Pug]
9: [Rat, Manx, Mutt, Mouse, Pug, Pug]
subList: [Manx, Mutt, Mouse]
10: true
sorted subList: [Manx, Mouse, Mutt]
11: true
shuffle subList: [Mouse, Manx, Mutt]
12: true
sub: [Mouse, Pug]
13: [Rat, Mouse, Manx, Mutt, Pug, Pug]
14: [Rat, Mouse, Mutt, Pug, Pug]
15: [Rat, Mutt]
16: [Rat, Mouse]
17: [Rat, Mouse, Mouse, Pug]
18: false
19: []
20: true
     */

1.contains()方法来确定某个对象是否在列表内
2.remove()移除某个元素(若该元素有多个,移除所有该元素)
3.indexOf()获取对象在List中所处位置(获取第一个出现的位置)
4.subList(a,b)从列表中获得一个片段,左闭右开
5.containsAll()包含该集合的所有元素(Collecions.sort()和Collections.shuffle()(随机排序)不会影响)
6.retainAll()保留了同时在copy和sub中的元素(依赖于equals)
7.removeAll()移除所有元素
8.set(),replace(),替换
9.addAll()从制定位置插入一个列表
10.toArray()将Collection转换成一个数组

在C++中,`std::list` 是一种动态数组实现的数据结构,如果处理不当,可能会导致程序挂起或“看起来”像死机的情况。以下是几种可能导致性能问题或内存泄漏的`std::list` 使用常见陷阱: 1. **频繁插入/删除头部元素**:由于`std::list` 的头部操作(如`push_front()`和`pop_front()`)的时间复杂度较高(O(n)),如果大量在列表头部添加或移除元素,效率会非常低。避免这种情况的方式是尽量减少对头部的操作,或使用其他数据结构(如`std::vector`)。 2. **迭代器失效**:遍历`std::list` 时,如果在循环内部修改了列表(比如添加或删除元素),迭代器会失效。务必检查迭代器的生命周期,确保其始终指向有效的元素。 3. **内存泄露**:如果不正确地管理`std::list` 中的资源(例如智能指针),当不再需要列表中的元素时忘记释放,可能会导致内存泄漏。记得在适当的时候调用`erase()`或析构函数来清理。 4. **过度分配内存**:`std::list` 会在每次插入或删除元素时重新分配内存,如果频繁大范围增删,可能导致不必要的内存碎片。尽量避免连续的大规模修改,可以考虑使用`reserve()`预置容量来减少这种开销。 5. **空指针异常**:使用空指针去操作`std::list` 可能导致未定义的行为。始终确保在操作前检查`list.empty()`或`iterator != list.end()`。 为了避免这些问题,确保在操作`std::list` 时保持良好的编程习惯,合理利用容器的特点并及时清理不再需要的元素。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值