本文已收录《面试题精选》系列,Gitee 开源地址:https://gitee.com/mydb/interview
HashMap 的遍历方法有很多种,不同的 JDK 版本有不同的写法,其中 JDK 8 就提供了 3 种 HashMap 的遍历方法,并且一举打破了之前遍历方法“很臃肿”的尴尬。
2024年10月10日
本文已收录《面试题精选》系列,Gitee 开源地址:https://gitee.com/mydb/interview
HashMap 的遍历方法有很多种,不同的 JDK 版本有不同的写法,其中 JDK 8 就提供了 3 种 HashMap 的遍历方法,并且一举打破了之前遍历方法“很臃肿”的尴尬。
2024年10月10日
文件在各级文件夹中查找可以利用递归实现,也可以通过链表实现:
运行效果:
附一个全盘查找指定类型文件的批处理文件:
@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
2024年10月10日
枚举是C语言中的一种基本数据类型,它可以用来声明一组常数(静态常量)。当一个变量有几个固定的可取值时就可以将其定义为枚举类型。枚举可以将变量值直接列出,使用时变量值只限于列举出的值范围内。很简单的例子就是日历中每周都有固定的7天,那么我们在定义星期的时候就可以用枚举。
枚举通过关键词enum来定义枚举类型,在枚举中声明该枚举类型的变量并使用该变量存储枚举元素的数值。基础类型表示该枚举中定义的所有枚举数值,枚举可以声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 等基础类型,如果没有声明基础类型则默认为int类型。枚举成员是该枚举类型的常量,所以枚举成员不能具有相同的变量名。如果枚举成员没有赋值则默认第一个枚举成员值为0,往后的枚举成员值会依次顺序加1。
2024年10月10日
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;
}
2024年10月10日
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=香山居士
2024年10月10日
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()); }
2024年10月10日
1、使用for循环遍历map;
2、使用迭代器遍历map;
3、使用keySet迭代遍历map;
4、使用entrySet遍历map。
创建一个Map集合
2024年10月10日
List是Java中比较常用的集合类,关于List接口有很多实现类,本文就来简单介绍下其中几个重点的实现ArrayList、LinkedList和Vector之间的关系和区别。
List 是一个接口,它继承于Collection的接口。它代表着有序的队列。当我们讨论List的时候,一般都和Set作比较。
List中元素可以重复,并且是有序的(这里的有序指的是按照放入的顺序进行存储。如按照顺序把1,2,3存入List,那么,从List中遍历出来的顺序也是1,2,3)。Set中的元素不可以重复,并且是无序的(从set中遍历出来的数据和放入顺序没有关系)。
2024年10月10日
上期讨论了 Set 的基本知识,一文了解 JavaScript 中的 Set(集合)文末提到使用 Set 进行数组去重。
通常去重的例子都是简单数组,存储的都是基本类型,例如 ——