浅浅说下Collection集合

本文深入讲解Java中的Collection集合,包括其子接口List和Set的特性,主要实现类如ArrayList、LinkedList、HashSet和TreeSet,以及Collection接口的常用方法。同时,文章详细介绍了如何使用Iterator接口遍历Collection集合,提供了实例代码并讨论了迭代自定义对象时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己在学习Java中,目前只学到了Collection集合的皮毛,来到这儿总结一番。废话不多说,入题吧!

在了解Collection集合之前,我们最好先知晓它的前世今生以及子孙后代们。
1.Collection集合全称是单列集合类的根接口。我在这儿一直喊他叫集合,就说明它是一种容器,用于存放一系列符合规格的某些元素。它有两个重要的子接口,分别是 java.util.List 和 java.util.Set 。其中, List 的特点是元素有序、元素可重复。 Set 的特点是元素无 序,而且不可重复。 List 接口的主要实现类有 java.util.ArrayList 和 java.util.LinkedList , Set 接口 的主要实现类有 java.util.HashSet 和 java.util.TreeSet 。而在这个家族中。Collection、List、Set是接口,其余的是类。多提一句,集合本身是一个工具,他们都存放在java.util包中,所以使用时需要导包。

Collection的使用方法

Collection是所有的单列集合类的父接口,所以它的使用方法可以继承到List 和 Set中。下面我就列出它的常用方法。

1.public boolean add(E e): 将给定的对象添加到集合中。返回值是一个boolean类型值 ,成功了是true,失败了是false。因为Collection集合中存放的元素是可重复的,所以可以说是存放元素只要符合条件,基本就是成功的,我们很少使用到(或我还没接触到)需要它的返回值的情况。
2. public boolean remove(E e):将指定元素删除。
3. public void clear(): 这个老牛逼了,清空整个集合,但是集合本身(容器)不会被删掉。
4. public int size():返回集合中元素的个数。
5. public boolean contains(E e):判断集合中是否包含有指定元素。对比起以前的数组,这个功能简直不要太给力了。
6.public boolean isEmpty():判断该集合是否为空,就是是否含有元素。
7.public Object[] toArray():将集合中的元素存放到数组中。因为数组中存放的数据类型是一致的,所以方法中使用的是Object来接受。需要注意的是,因为数组长度不可更改,所以更改成数组后,以及数组转成集合后,里面所包含的元素也就不可以增删了啊,只可以替代覆盖哦。
以下作为演示:

import java.util.ArrayList;
import java.util.Collection;

public class demo01_Collection集合 {
public static void main( String[] args ) {
    //  ArrayList 是Collection接口的子类,
    //所以在这里通过新建一个ArrayList对象来调用父接口
    Collection<String> col = new ArrayList<>();
        //add方法 将元素添加到集合中去
    col.add("三叉戟");
    col.add("都神剑");
    col.add("狂魔镰");
    col.add("刑天斧");
    col.add("虚空杖");  
     //咳咳,最近回归了大乐斗,前几天学了对象和接口,想着整个大乐斗单机版,所以有点儿着迷了
    System.out.println(col);
        //remov方法     删除集合中的目标元素,集合中没有该元素不会报错
    col.remove("刑天斧");
    System.out.println(col);

    //contains方法  判断目标是否在集合中,返回值是boolean类型
    col.contains("刑天斧");
    //  isEmpty  方法,判断集合中是否为空,返回值是boolean类型
    col.isEmpty();
    //size   返回集合中元素的个数,返回值是int类型
    int size = col.size();
    //  toArray  方法,将集合返回到数组去
    String[] arr = new String[5];
    col.toArray(arr);
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i]+"  ");
    }
    //clean 方法,将整个集合中的所有元素清楚,但是集合本身依然保留!
    col.clear();
    System.out.println(col);

}

}

Collection集合的遍历

既然学到了一个集合,学会了它的使用方式,怎么会缺的了它的遍历呢?在JDK中提供了一个温馨贴切的Iterator接口: java.util.Iterator(导包加1) 这个接口是用来遍历Collection集合的,它有个名称叫做迭代器。而作为遍历一个Collection集合的迭代器,也是有以下几个步骤的。
一:生成对应集合的迭代器。
二:判断集合中是否有下一个元素。
三:有的话,则将元素取出来。
示例代码:

   import java.util.ArrayList;
   import java.util.Collection;
   import java.util.Iterator;

public class demo01_Iterator迭代器 {
    public static void main( String[] args ) {
        //创建集合
        Collection<String> coll = new ArrayList<>();    //collection是一个抽象父接口,所以只好通过引用子类来实现了

        coll.add("旺仔牛奶");
        coll.add("AD钙奶");
        coll.add("旺旺奶糖");
        coll.add("好丽友");
        coll.add("抹茶小饼干");
        coll.add("好时巧克力");

        //  创建集合对应的迭代器
        Iterator<String>  diedaiqi= coll.iterator();
//进行判断,是否有下一个元素,有的话才能执行拿取操作
        while(diedaiqi.hasNext()){
            String s = diedaiqi.next();
            System.out.println(s);
        }
    }
}

迭代器的使用注意

因为迭代器的判断是如果有下一个,再拿取。所以迭代器在进行迭代自定义对象时容易出问题。详情可以参看它的原理:
迭代器是有指针的,当判断有一个元素时,进行拿取后,指针就会下移。如果你的自定义对象有多个属性时,就容易获取到下一个元素的某一属性了。表达能力有限,用代码表示。
新建的Person类

    public class Person {
        private String name;
        private int age;
        //构造空参
    public Person( ) {

    }
//构造有参
    public Person( String name, int age ) {
        this.name = name;
        this.age = age;
    }
//各属性的 get/set 方法
    public String getName() {
        return name;
    }

    public void setName( String name ) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge( int age ) {
        this.age = age;
    }
}

测试类:

package demo02_Iterator迭代器;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class demo02_Iterator的使用注意 {
    public static void main( String[] args ) {
        Person p1 = new Person("张三",23);
        Person p2 = new Person("李四",24);
        Person p3 = new Person("王五",25);
        Person p4 = new Person("赵六",26);

        //新建Collection集合
        Collection<Person> coll = new ArrayList<>();
        coll.add(p1);
        coll.add(p2);
        coll.add(p3);
        coll.add(p4);

        //创建对应的迭代器
       /* Iterator<Person> it = coll.iterator();
        //进行判断
        while(it.hasNext()){
            System.out.println("名字:"+it.next().getName()+"年龄:"+it.next().getAge());
            //输出 名字:张三年龄:24
            //     名字:王五年龄:26
        }*/

       //修正版
        Iterator<Person> it = coll.iterator();
        while(it.hasNext()){
            Person p =it.next();
            System.out.println("名字:"+p.getName()+"--"+"年龄:"+p.getAge());
        }
    }
}

在测试类中的第一次输出,大家会发现张三的年龄不是23了,而是24,并且跳过了李四等。这就是迭代器使用时需要注意的事项,可以多一步,给每个迭代对象起个名,再用自定义类的对象去调用迭代器的next()方法就可以了。详情请看代码中的修改部分

以上就是我对Collection集合的一个简单理解,当然Collection集合绝不止这么点内容,有空我会再说说List集合和Set集合。将这两个集合以及他们的子类讲解了,才算是大概的讲完了这个集合一家的故事。




<think>好的,我现在需要帮助用户解决如何在VMware中安装合适的USB设备驱动的问题。首先,我需要理解用户的问题到底是什么。用户提到的是“VMware USB device在哪下载合适的驱动”,可能是指当他们在VMware虚拟机中使用USB设备时遇到了驱动问题,需要找到正确的驱动程序。 接下来,我要回忆一下VMware产品中关于USB设备支持的相关知识。VMware Workstation和Fusion等产品通常会自动处理USB设备的连接,但在某些情况下,可能需要安装额外的驱动,尤其是在客户机操作系统中。例如,如果客户机是Windows,可能需要安装VMware Tools来增强USB支持;如果是Linux,可能需要特定的驱动包。 然后,我需要考虑用户可能的具体情况。用户可能已经将USB设备连接到主机,但在虚拟机中无法识别,或者出现驱动错误。这时候需要确定是主机驱动的问题还是客户机驱动的问题。通常,主机不需要额外驱动,因为VMware会通过自身的服务处理USB设备的连接,而客户机可能需要安装VMware Tools来获得更好的兼容性。 接着,我需要思考正确的步骤来引导用户解决问题。首先,应该检查VMware Tools是否已经安装,这是解决很多设备兼容性问题的第一步。如果已经安装,可能需要更新到最新版本。其次,对于客户机操作系统,比如Windows,可能需要检查设备管理器中的USB控制器是否有感叹号,是否需要手动安装驱动。此外,还需要确认主机的USB控制器设置是否正确,比如在虚拟机设置中选择USB兼容性版本(如USB 3.0或2.0)。 如果用户的问题是关于主机系统的驱动,比如VMwareUSB控制器驱动在主机上出现问题,可能需要到VMware官网下载并重新安装VMware Workstation或Player,这样会自动安装所需的驱动。另外,某些情况下,主机的USB驱动可能需要更新,比如芯片组驱动或USB 3.0驱动,这需要到主机厂商的网站下载。 还需要考虑用户可能的误解。例如,用户可能认为需要单独下载USB驱动,但实际上,大多数情况下,VMware Tools已经包含了必要的驱动。如果用户已经安装了VMware Tools但仍然有问题,可能需要进一步的故障排除,比如检查USB设备的兼容性,尝试不同的USB端口,或者重启VMware的相关服务。 最后,整理出清晰的步骤,确保用户能够按照流程操作,同时提醒常见的注意事项,比如以管理员身份运行安装程序,确保虚拟机配置正确等。可能还需要提供VMware官网的链接,方便用户下载工具或更新版本。</think>在VMware虚拟机中使用USB设备时,通常不需要单独下载"VMware USB设备驱动",但需要按以下流程操作: ### 一、基础准备 1. **主机端** - 确保主机已安装最新版VMware Tools(VMware Workstation/Fusion自带) - 无需单独下载驱动,系统会自动加载`vmware-usbarbitrator`服务 2. **虚拟机配置** - 打开虚拟机设置 → USB控制器 → 勾选`USB兼容性`(建议选3.0或自动) ### 二、客户机驱动安装 1. **Windows客户机** - 安装VMware Tools(虚拟机菜单 → 管理 → 安装VMware Tools) - 插入USB设备后,会自动加载`vmware USBCCID`驱动程序 2. **Linux客户机** - 安装open-vm-tools: ```bash sudo apt-get install open-vm-tools-desktop ``` - 加载USB驱动模块: ```bash sudo modprobe uhci_hcd ehci_hcd ohci_hcd xhci_hcd ``` ### 三、常见问题排查 1. **设备无法识别** - 检查主机设备管理器 → 确保无`VMware USB Device`黄色感叹号 - 重启服务:`services.msc` → 重启`VMware USB Arbitration Service` 2. **特殊设备支持** - 加密狗/工控设备需在虚拟机设置 → USB控制器 → 开启`显示所有USB输入设备` - 对于USB转串口设备,建议在客户机安装对应芯片驱动(如FTDI、CH340) ### 四、驱动下载渠道(仅限特殊情况) 如需获取底层驱动文件,可通过: 1. VMware官网支持页面: ``` https://customerconnect.vmware.com/downloads ``` 2. 选择对应产品 → 驱动包通常包含在`VMware Tools Bundle`中 > **注意事项**: > - 虚拟机运行时才能看到USB设备连接选项 > - 苹果M系列芯片需使用ARM版Windows/Linux系统 > - 安卓设备需开启开发者模式+USB调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值