List / Map / Collections

本文详细介绍了LinkedList的特点及使用场景,包括如何作为双端队列使用,并提供了具体示例代码。同时,文中还讲解了LinkedHashMap如何保持插入顺序,并通过示例展示了其遍历过程。

LinkedList可以根据索引来访问集合中的元素,此外还实现了Deque接口,所以也可以当成双端队列来使用,即可当“栈”(先进后出),也可以当作队(先进先出);内部是以线性表和链表实现的,保证输入的顺序。通常用Iterator遍历。
示例:

public class LinkedListDemo {  

    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        LinkedList<String> list = new LinkedList<String>();  
        list.add("哈哈");  
        list.add("呵呵");  
        list.add("嘿嘿");  
        print(list);  

        list.addFirst("嘻嘻");//链表可以在头或尾插入  
        print(list);  
        //将元素加入到对头  
        list.offerFirst("来来");  
        //将元素加入到队尾  
        list.offerLast("去去");  
        print(list);  
        //访问并不删除栈顶  
        System.out.println("访问并不删除栈顶----" +list.peekFirst());  
        print(list);  
        //访问并删除栈顶  
        System.out.println("访问并删除栈顶----" + list.poll());  
        print(list);  

    }  

    public static void print(List list){  
        Iterator iterator = list.iterator();  
        while(iterator.hasNext()){  
            System.out.print(iterator.next() + " ");  
        }  
        System.out.println();  
    }  

}  

注意:LinkedList在进行删除、插入操作时性能更优,而ArrayList在遍历的时候应能更优。

LinkedHashMap
LinkedHashMap也是使用双向链表来维护key-value,保证迭代顺序与key-value对的插入顺序一直。
示例:

public class LinkedHashMapDemo {  

    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer,String>();  
        map.put(12, "吃饭");  
        map.put(14, "睡觉");  
        map.put(13, "打豆豆");  
        map.put(11, "刷牙");  
        map.put(15, "上厕所");  


        //第一种遍历方式keySet()  
        Set<Integer> keySet = map.keySet();  
        Iterator<Integer> i = keySet.iterator();  
        while(i.hasNext()){  
            Integer key = i.next();  
            System.out.println("键是:" + key + "值是:" + map.get(key));  
        }  



    }  

}  

collections查找替换操作
示例:

public class Demo10 {  
    public static void main(String[] args) {  
        List list = new ArrayList<Integer>();  
        list.add(4);  
        list.add(3);  
        list.add(12);  
        list.add(-9);  

        //自然排序  
        Collections.sort(list);  
        print(list);  

        //查找、替换  
        System.out.println("最大元素是:" + Collections.max(list));  
        System.out.println("4的索引是:" + Collections.binarySearch(list, 4));  
        System.out.println("替换所有的元素:" );  
        Collections.fill(list, 1);  
        print(list);  



    }  
    public static void print(List<Integer> arr){  
        for(Integer str:arr){  
            System.out.print(str + " ");  
        }  
        System.out.println();  
    }  

}  
<think>我们参考了用户提供的引用内容,其中引用[1]展示了Map的基本操作,包括添加元素、根据键获取值、获取所有键的集合、获取所有值的集合。引用[2]展示了Collections工具类的使用,包括打乱顺序、排序(自然排序和自定义排序)。引用[3]展示了Arrays工具类的使用,如将数组转换为List。引用[4]则对ListMapCollections进行了概述。用户的问题是关于Java中CollectionsMap的操作方法、示例和用法。我们将从以下几个方面进行回答:1.Map接口的常用方法及示例2.Collections工具类的常用方法及示例3.结合Arrays工具类的数组与集合转换注意:根据系统指令,行内数学表达式使用$...$,独立公式使用$$...$$,但本问题不涉及数学公式,故主要展示代码示例和文字说明。同时,按照要求使用中文回答,并在回答末尾生成相关问题。以下为回答内容:</think>### Java CollectionsMap 操作方法详解 #### 一、Map 接口操作 Map 存储键值对(Key-Value),键唯一,值可重复。常用实现类:`HashMap`。 **核心方法及示例**: ```java Map<String, String> map = new HashMap<>(); // 1. 添加元素 map.put("郭靖", "黄蓉"); map.put("杨过", "小龙女"); // 2. 获取值(通过键) System.out.println(map.get("郭靖")); // 输出:黄蓉 // 3. 获取所有键 Set<String> keys = map.keySet(); for (String key : keys) { System.out.println(key); // 输出所有键 } // 4. 获取所有值 Collection<String> values = map.values(); for (String value : values) { System.out.println(value); // 输出所有值 } // 5. 遍历键值对(推荐方式) for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } ``` #### 二、Collections 工具类 提供操作集合的静态方法,支持排序、打乱、查找等。 **常用方法示例**: ```java List<Integer> numbers = new ArrayList<>(); Collections.addAll(numbers, 3, 1, 4, 2); // 添加元素 // 1. 自然排序(升序) Collections.sort(numbers); // 结果:[1, 2, 3, 4] // 2. 自定义排序(按身高降序) List<Student> students = new ArrayList<>(); students.add(new Student("张三", 175)); students.add(new Student("李四", 168)); Collections.sort(students, new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { return Integer.compare(s2.getHeight(), s1.getHeight()); } }); // 3. 打乱顺序 Collections.shuffle(numbers); // 随机重排 // 4. 二分查找(需先排序) Collections.sort(numbers); int index = Collections.binarySearch(numbers, 3); // 返回索引位置 ``` #### 三、集合与数组转换 ```java // 数组 → 集合 String[] names = {"张三", "李四"}; List<String> nameList = Arrays.asList(names); // 固定长度集合 // 集合 → 数组 List<Integer> list = List.of(1, 2, 3); Integer[] arr = list.toArray(new Integer[0]); ``` #### 四、MapCollections 协作 ```java // 统计词频 List<String> words = List.of("apple", "banana", "apple", "orange"); Map<String, Integer> frequency = new HashMap<>(); for (String word : words) { frequency.put(word, frequency.getOrDefault(word, 0) + 1); } // 输出:{apple=2, banana=1, orange=1} ``` > **关键区别** > - `Collection`:单列集合根接口(List/Set) > - `Collections`:操作集合的工具类 > - `Map`:双列集合,独立于 Collection 体系[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值