『Java』Java当中会有那些误区?( 三 )


Set<String> keysSet=map.keySet(); 获取Map中的key 容器是Set
value—>List 允许有重复元素
Collection<String> value=https://mparticle.uc.cn/api/map.values(); 获取Map中的Value 容器是Collection
map.put(keyvalue); 存储 , 包含key:不可重复 。 value:存储的内容 , 可重复
map.get(key); 只能根据key获得value值 , 不能反过来 , Map中无索引概念
map.remove(key); 根据key删除容器中的 Key和Value
遍历: 分别遍历key或value或者直接遍历key、value :
Set<Map.Entry<String String>> entry=map.entrySet();
Set<Map.Entry<数据类型 数据类型>> 对象名=map.entrySet();
e.getKey(); 获取Key的值 e.getValue; 获取Value值
Map是没有顺序的 , 遍历的顺序和添加的顺序无关 , 不一定一致
Hashtable : HashMap和Hashtable的区别在于 , table中value不能为空(null)
map中的value可以为空(null)
其他使用方式完全一致
无论任何情况下 , 禁止在容器遍历情况下修改容器长度(添加元素或删除元素) 否则会导致未知错误
增强for循环
for(数据类型 实例化对象名:数组名){便利数组中的每一个元素
数据类型一定要和数组或集合类型保持一致 只能用来遍历数组和集合
实例化对象名:在每一次循环中就表示索引对应的元素
Iterator (迭代器接口)
用来遍历接口
Iterator iterator =arrayList.iterator();
while(iterator.hasNext()){
iterator.hasNext()
返回值boolean 类型 , 用来判断容器的遍历是否到达末尾
Object object=iterator.next();
集合中类型不确定 , 因此定义一个Object 类的对象来传元素值
System.out.println(object);
通过next();方法获得容器中的每一个元素
Java中的泛型
泛型名称通常从下面几个字母中选:
T:type 最常用
E:Element
K:Key
V:Value
泛型可以在类、接口、方法中使用 , 创建泛型时不用声明什么类型 , 实现含泛型的类、接口、方法时要给泛型制定具体类型
泛型通常用在集合中[(容器)Collection、Map
用来指定容器中元素的类型
例:
ArrayList<存储类型/存储类名> list\"实例化对象名\"=new ArrayList<存储类型/存储类名>();
后面<>中内容可以省略
声明泛型放在类名、方法名、借口名后
Java中的基本类型和引用类型
基本数据类型和引用类型在内存分配上有很大区别 代码执行要读入到内存中
Java中的内存详解
JVM(虚拟机)中的内存空间可简单分为
栈(Stack):占用空间较小 , 读取速度较快
栈上内存由计算机自动分配和释放
堆(heap):占用空间较大 , 读取速度相对较慢
堆上内容由程序员手动分配和释放
常量区:不会变化的数据
静态变量:static修饰的变量与方法
代码区:.class文件内容 , 代码结构方法
类的元数据区:存放生成类的元素对象
new——>分配空间
Java中采用GC的机制(GC : 垃圾回收机制 释放不再使用的内存空间) , 有JVM帮我们回收
内存泄漏 : 使用完的内存空间没有释放 , 导致可用内存空间减少 。 如果内存泄漏过多会导致程序奔溃
内存分配
基本数据类型都放在栈上 , 占用空间小
引用类型所占空间比基本数据类型大很多 , 所以引用类型的值放在堆上 , 并在栈上保留一个堆的地址引用
基本数据类型值在栈上 , 相互独立
引用类型值在堆上 , 栈上只是堆的地址引用 , 对堆上的值进行修改 , 所有栈上引用都受影响
变量名/指针:因为变量经常使用 , 所以内存分配在栈上 。


推荐阅读