Map集合

本文深入解析Java中的Map、HashSet、HashMap集合框架及其内部实现,包括添加、查找、删除操作,迭代方式,以及与Hashtable的区别。同时,介绍了HashMap的泛型使用、静态导入特性、集合转数组与数组转集合的方法,以及如何通过键获取值,判断元素是否存在,清空集合等常见操作。

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


 

Map集合

Map<String ,Integer> map =newHashMap<>();

map.put("张三",100);

map.put("李四",100);

map.put("王五",100);

map.put("张三",66);            //键是唯一的,键如果相同,后面的值会把前面覆盖

 

System.out.println(map.size());  //打印为3

System.out.println(map);       //

 

HashSetHaseMap的关系

1.HashSetAdd方法底层

 

 

Map<String ,String> map =newHashMap<>();

map.put("张三","北京");

map.put("李四","北京");

map.put("王五","广州");

map.put("赵六","上海");

 

map.clear();       //清空集合中的元素

map.containsKey("张三")     //判断是否包含键,包含则返回true

map.containsValue("北京")   //判断是否包含的值,包含则返回true

 

map.get("张三")           //通过键获得值北京,但不能通过值获取键

map.isEmpty();           //判断是否为空

 

String val =map.remove("张三"); //通过键来删除,返回对应的值

Collection<String> coll =map.values(); //获取双列集合中的所有的值

 

map集合的两种迭代方式

   1、迭代器

  

 Set<String> setMap = map.keySet();
        Iterator<String> it = setMap.iterator();
        while(it.hasNext()){
        	String key = it.next();
        	Integer value = map.get(key);//通过键获取Value值
        	System.out.println(key+" = "+value);
        }


   2、增强for循环

  

for(String str:map.keySet()){
        	System.out.println(str+" = "+map.get(str));
        }

interface Map{
   interface Entry{              //  entry 正在封闭的借口
      
   }
}
class Test implements Map.Entry{
}


 

 

Map集合的迭代Map.Entry

    1 迭代器实现

    //将键值对象存储在Set集合里

    Set<Map.Entry<String, Integer>>entrySet = map.entrySet();

   //获取迭代器

        

  Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();
        while(it.hasNext()){
        	Map.Entry<String, Integer> en = it.next();//获取集合的每个
                                                             //键值对象
        	String key = en.getKey();          //通过键值对象获取键
        	Integer value = en.getValue();   //通过键值对象获取值
        	System.out.println(key+" = "+value);
        }


 

     2增强for循环实现

        //map.entrySet代表键值对象的集合Entry

        for(Map.Entry<String,Integer> en:map.entrySet()){

            System.out.println(en.getKey()+"="+en.getValue());

        }

 

HashMap

//如果存的是对象如Person new("张三",20)需要重写hashCode()equals方法

HashMap<String,Integer>hm=new HashMap<>();

 

LinkedHashmap//怎么存进去怎么取出来

 

TreeMap<String,integer> tm=new TreeMap<>();//按照键排序

如果是比较对象可以实现Comparable接口重写compareTo()方法

Comparator接口中重写compare方法

 

Collections.sort(list)//升序,字典顺序

Collections.sort(list,Collections.reverseOrder())//对集合中的数据反转

 

Collections.sort(list,Collections.reverseOrder(newCompareBylen()));  //把比较器的顺序反转。

 

String[] arr={"a","b","c","d"};

List<String>list=Arrays.asList(arr);//数组转集合就是用集合的思想去考虑

//问题可以使用集合中除了改变长度的方法

 

int []arr2={12,32,43,54};

list<int []>list2 = Arrays.asList(arr2);//如果数组是基本类型的,转换

                             //为集合,会将整个数组当做一个对象存储到集合中

 

Integer[]arr3={12,32,43,54};

list<Integer[]> list2 = Arrays.asList(arr3)

 

String[] arr = list.toArray(newString[list.Size()])//集合转数组

                                         //只有一个好处,集合长度不能改变

 

静态导入(1.5版的新特性)

静态导入是导入类中的静态方法,只要类中有静态方法都可以使用静态导入。建议不用

 

HashtablehashMap

底层都是哈希算法

1hashtable是线程安全的,效率低jdk1.0

hashMap是线程不安全的,效率高,jdk1.2

2Hashtable不能存储null键和null

   HashMap

 

 

 泛型补充

? extends E固定上边界

 

ArrayList<Person> list1 = new ArrayList<>();
list1.add(new Person("张三",23));
list1.add(new Person("李四",24));
ArrayList<Student> list2 = new ArrayList<>();
list2.add(new Student("王五",25));
list2.add(new Student("赵六",26));


 

? super E固定下边界

TreeSet<Person> list1 = new TreeSet<>(new CompareByAge());
list1.add(new Person("张三",23));
list1.add(new Person("李四",24));
TreeSet<Student> list1 = new TreeSet<>(new CompareByAge());
list2.add(new Student("王五",25));
list2.add(new Student("赵六",26));
class CompareByAge implements Comparator<Person>{
   @Override
   public int compare(Person p1,Person p2){
     int num=p1.getAge-p2.getAge();
      return num==0?p1.getName()-p2.getName():num;
   }
}


 

 

数据集介绍:野生动物与家畜多目标检测数据集 数据集名称:野生动物与家畜多目标检测数据集 数据规模: - 训练集:1,540张图片 - 验证集:377张图片 - 测试集:316张图片 分类类别: Brown-bear(棕熊)、Chicken(鸡)、Fox(狐狸)、Hedgehog(刺猬)、Horse(马)、Mouse(老鼠)、Sheep(绵羊)、Snake(蛇)、Turtle(龟)、Rabbit(兔)及通用object(物体)共11个类别 标注格式: YOLO格式标注,包含归一化坐标与类别索引,支持目标检测模型训练 数据特性: 涵盖航拍与地面视角,包含动物个体及群体场景,适用于复杂环境下的多目标识别 农业智能化管理: 通过检测家畜(鸡/马/绵羊等)数量及活动状态,辅助畜牧场自动化管理 生态监测系统: 支持野生动物(棕熊/狐狸/刺猬等)识别与追踪,用于自然保护区生物多样性研究 智能安防应用: 检测农场周边危险动物(蛇/狐狸),构建入侵预警系统 动物行为研究: 提供多物种共存场景数据,支持动物群体交互行为分析 高实用性标注体系: - 精细标注包含动物完整轮廓的边界框 - 特别区分野生动物与家畜类别,支持跨场景迁移学习 多维度覆盖: - 包含昼间/复杂背景/遮挡场景 - 涵盖陆地常见中小型动物与禽类 - 提供通用object类别适配扩展需求 工程适配性强: - 原生YOLO格式适配主流检测框架(YOLOv5/v7/v8等) - 验证集与测试集比例科学,支持可靠模型评估 生态价值突出: - 同步覆盖濒危物种(龟类)与常见物种 - 支持生物多样性保护与农业生产的双重应用场景
内容概要:本文档详细介绍了Python实现TSO-ELM(金枪鱼群优化算法优化极限学习机)多输入单输出回归预测的项目实例。极限学习机(ELM)作为一种快速训练的前馈神经网络算法,虽然具有训练速度快、计算简单等优点,但也存在局部最优解和参数敏感性的问题。金枪鱼群优化算法(TSO)通过模拟金枪鱼群体觅食行为,具有较强的全局搜索能力。将TSO与ELM结合形成的TSO-ELM模型,可以优化ELM的输入层和隐藏层之间的权重,提高回归预测的准确性。项目包括数据预处理、TSO优化、ELM回归模型训练和预测输出四个主要步骤,并提供了详细的代码示例。; 适合人群:对机器学习、优化算法有一定了解的数据科学家、算法工程师和研究人员,特别是那些希望深入理解智能优化算法在回归预测任务中的应用的人群。; 使用场景及目标:① 提升ELM在多输入单输出回归预测中的性能,特别是在处理非线性问题时的预测精度;② 解决ELM中的局部最优解和参数敏感性问题;③ 优化ELM的隐层权重和偏置值,提高模型的表达能力和预测能力;④ 在金融、气象、能源、医疗、交通等领域提供更准确的预测模型。; 阅读建议:本文档不仅提供了理论解释,还包含详细的代码实现,建议读者在阅读过程中结合代码进行实践,理解TSO-ELM模型的工作原理,并尝试调整参数以优化预测效果。同时,读者应关注TSO算法在高维复杂问题中的应用挑战,思考如何改进优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值