四时宝库

程序员的知识宝库

HashMap有几种遍历方法?推荐使用哪种?


本文已收录《面试题精选》系列,Gitee 开源地址:https://gitee.com/mydb/interview

HashMap 的遍历方法有很多种,不同的 JDK 版本有不同的写法,其中 JDK 8 就提供了 3 种 HashMap 的遍历方法,并且一举打破了之前遍历方法“很臃肿”的尴尬。

C++|利用链表实现在指定路径下遍历各级文件夹进行文件查找

文件在各级文件夹中查找可以利用递归实现,也可以通过链表实现:

运行效果:

附一个全盘查找指定类型文件的批处理文件:

@echo off
setlocal enabledelayedexpansion
echo. >c:\virus.txt
color 3a
echo.
set /a n = 0
set /p b=输入查找文件扩展名:
if /i "%b%"=="" cls && goto fh
echo 系统正在查找文件,请耐心等候......
echo.
::for %%a in (F E D C) do (
for %%a in (E) do (
cd /d %%a:\
	for /r %%b in (*.%b%) do (
		if exist "%%b" (
			echo %%b
			echo %%b>>c:\virus.txt
			set /a n+=1
			echo 现查到%b%文件个数:!n!
		)
	)
)
type c:\virus.txt | find /i "\" && goto no
echo.
echo 文件内容没找到!
del c:\virus.txt>nul 2>nul
echo.
pause
exit
:no
::cls
echo.
echo 文件查找完毕并记录在c:\virus.txt中 !
echo 现查到%b%文件总的个数:!n!
echo.
echo 是否打开文本查看记录 ?
echo.
echo 选择" Y "查看。 选择" N "退出。
echo.
set /p Choice=Y/N: 
IF /I '%Choice:~0,1%'=='y' goto A
IF /I '%Choice:~0,1%'=='n' goto B
pause
exit
:A
start c:\virus.txt
exit
pause
:b
exit

C/C++实战027:遍历enum枚举类型(c++ enum 遍历)

什么是枚举

枚举是C语言中的一种基本数据类型,它可以用来声明一组常数(静态常量)。当一个变量有几个固定的可取值时就可以将其定义为枚举类型。枚举可以将变量值直接列出,使用时变量值只限于列举出的值范围内。很简单的例子就是日历中每周都有固定的7天,那么我们在定义星期的时候就可以用枚举。

枚举定义

枚举通过关键词enum来定义枚举类型,在枚举中声明该枚举类型的变量并使用该变量存储枚举元素的数值。基础类型表示该枚举中定义的所有枚举数值,枚举可以声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 等基础类型,如果没有声明基础类型则默认为int类型。枚举成员是该枚举类型的常量,所以枚举成员不能具有相同的变量名。如果枚举成员没有赋值则默认第一个枚举成员值为0,往后的枚举成员值会依次顺序加1。

C++ stl 常用遍历算法(for_each transform)

stl 常用遍历算法(for_each transform)

示例代码(结论在结尾!!!!)


#include<iostream>
using namespace std;
#include"vector"
#include"map"
#include"string"
#include"list"
#include"set"
#include"functional"
#include"iterator"//输出流迭代器
void printV(vector<int> &v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++);//用迭代器的方式打印出来
	{
		cout << *it << endl;
	}
}
void printList(list<int> &v)
{
	for (list<int>::iterator it = v.begin(); it != v.end(); it++);//用迭代器的方式打印出来
	{
		cout << *it << endl;
	}
}
void showElem(int &n)
{
	cout << n << " ";
}
class CMyShow
{
public:
	CMyShow()
	{
		num = 0;
	}
	void operator()(int &n)
	{
		num++;
		cout << n << " ";
	}
	void printNum()
	{
		cout << "num:" << num << endl;
	}
protected:
private:
	int num;
};
void main11_foreach()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(5);
	printV(v1);
	cout << endl;
	//函数对象 回调函数入口
	for_each(v1.begin(), v1.end(), showElem);
	cout << endl;
	for_each(v1.begin(), v1.end(), CMyShow());
	cout << endl;
	CMyShow mya;
	CMyShow my1=for_each(v1.begin(), v1.end(), mya);//初始化
	my1.printNum();//打印出来了调用次数
	mya.printNum();//mya  my1是二个不同的对象
	my1 = for_each(v1.begin(), v1.end(), mya);//给my1赋值
	my1.printNum();
}
int increase(int i)
{
	return i + 100;
}
void main22_transform()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(5);
	printV(v1);
	cout << endl;
	//使用回调函数
	transform(v1.begin(), v1.end(), v1.begin(), increase);
	printV(v1);
	cout << endl;
	//使用预定义的函数对象
	transform(v1.begin(), v1.end(), v1.begin(), negate<int>());
	printV(v1);
	cout << endl;
	//transform使用函数适配器
	list<int> mylist;
	mylist.resize(v1.size());
	transform(v1.begin(), v1.end(), mylist.begin(), bind2nd(multiplies<int>(), 10));//第一个参数来着容器,第2个参数来自10
	printList(mylist);
	cout << endl;
	//也可以把原酸结果直接输出到屏幕
	transform(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "), negate<int>());
	cout << endl;
}
void main33_foreach_pk_transform()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(5);
	vector<int> v2;
	for_each(v1.begin(), v1.end(), showElem);
	transform(v2.begin(), v2.end(), v2.begin(), showElem);
}
void main()
{
	
	main33_foreach_pk_transform();
	main22_transform();
	main11_foreach();
	cout << "hello..." << endl;
	system("pause");
	return;
}

Map 集合遍历的5种方法,收藏备用



Map 集合初始化时,指定集合初始值大小。

说明:HashMap 使用 HashMap(int initialCapacity) 初始化。

正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loaderfactor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)。

反例:HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容量 7 次被迫扩大,resize 需要重建 hash 表,严重影响性能。

public class ForeachMap {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("李白", "青莲居士");
        map.put("杜甫", "少陵野老");
        map.put("白居易", "香山居士");

        //第一种:普遍使用,二次取值
        System.out.println("通过Map.keySet遍历key和value");
        for (String key : map.keySet()) {
            System.out.println("key= "+ key + " and value= " + map.get(key));
        }

        //第二种:使用iterator
        System.out.println("通过Map.entrySet使用iterator遍历key和value");
        Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, String> entry = it.next();
            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }

        //第三种:推荐,尤其是容量大时
        System.out.println("通过Map.entrySet遍历key和value");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }

        //第四种:Map.values()
        System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
        for (String v : map.values()) {
            System.out.println("value= " + v);
        }
        //第五种:map.forEach
        System.out.println("map.forEach JDK1.8 新特性");
        map.forEach((key, value) -> {
            System.out.println("key=" + key + ",value=" + value);
        });

    }

运行结果:
通过Map.keySet遍历key和value
key= 李白 and value= 青莲居士
key= 杜甫 and value= 少陵野老
key= 白居易 and value= 香山居士
通过Map.entrySet使用iterator遍历key和value
key= 李白 and value= 青莲居士
key= 杜甫 and value= 少陵野老
key= 白居易 and value= 香山居士
通过Map.entrySet遍历key和value
key= 李白 and value= 青莲居士
key= 杜甫 and value= 少陵野老
key= 白居易 and value= 香山居士
通过Map.values()遍历所有的value,但不能遍历key
value= 青莲居士
value= 少陵野老
value= 香山居士
map.forEach JDK1.8 新特性
key=李白,value=青莲居士
key=杜甫,value=少陵野老
key=白居易,value=香山居士


Java中Map的几种遍历方式(java遍历map的key和value)

Java中遍历map主要有以下几种方法:

1.使用entrySet,也是最常见的使用办法,在键和键值都需要的时候最常用(推荐,尤其是容量大时):

Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
for (Map.Entry<Integer, Integer> entry : map.entrySet()) { 
 System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 
}

Swift 学习笔记二(Set篇)(swift入门教程)

1.1 Set 的概念

计算机程序员的入门实践-Map常用的遍历方式(七)

1、使用for循环遍历map;

2、使用迭代器遍历map;

3、使用keySet迭代遍历map;

4、使用entrySet遍历map。

创建一个Map集合

Java中的List你真的会用吗?不会用的话请收藏我的这篇文章

List是Java中比较常用的集合类,关于List接口有很多实现类,本文就来简单介绍下其中几个重点的实现ArrayList、LinkedList和Vector之间的关系和区别。

List

List 是一个接口,它继承于Collection的接口。它代表着有序的队列。当我们讨论List的时候,一般都和Set作比较。

List中元素可以重复,并且是有序的(这里的有序指的是按照放入的顺序进行存储。如按照顺序把1,2,3存入List,那么,从List中遍历出来的顺序也是1,2,3)。Set中的元素不可以重复,并且是无序的(从set中遍历出来的数据和放入顺序没有关系)。

一文了解 JavaScript 中的 Set(集合)- 多种去重技巧

上期讨论了 Set 的基本知识,一文了解 JavaScript 中的 Set(集合)文末提到使用 Set 进行数组去重。

通常去重的例子都是简单数组,存储的都是基本类型,例如 ——

<< < 1 2 3 4 5 6 7 8 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接