java基础(4)---引用数据类型(数组、字符串、集合)
一、数组
1、格式:int[] nums;
1. 数据类型[] 数组名称;
2. 数据类型 数组名称[]; (不太推荐)
2、 动态初始化:new int[4]
数据类型[] 数组名称 = new 数据类型[数组长度]
默认值:
3、静态初始化:
int[] nums = new int[] {1,2,3,4} / int[] nums = {1,2,3,4}
4、访问数组元素:数组名[index]
直接访问数组名,返回 [I@…… ,其中[表明是数组,I表示Int类型,@后面是地址。
访问数组中元素: 从0开始,且索引没有负数。
改变数组元素: 数组名[index] = 赋值
5、方法: nums.length
获取数组长度:数组名称.length
代码示例:
// 两种先声明后创建的方式(声明和创建都有2种方式)
int[] list1;
int list2[];
list1 = new int[4];
list2 = new int[] {11,22,33,44}; // 第一种:声明的同时创建(3种方式)
int[] list3 = new int[4];
int[] list4 = new int[] {11,22,33,44};
int[] list5 = {11,22,33,44}; // 第二种:声明的同时创建(3种方式)
int list6[] = new int[4];
int list7[] = new int[] {11,22,33,44};
int list8[] = {11,22,33,44};
6、多维数组:int [][] = new int[4][4];
7、数组的排序:Arrays.sort(a);
import java.util.Arrays;
int[] a = { 12,3,19,2,10,13,9};
Arrays.sort(a); // a为排序之后的值
8、Arrays类:
import java.util.Arrays;
import java.util.Random; public class ArraysDemo {
public static void main(String[] args) {
int[] arr = new int[10];
//将数组元素都设为9
Arrays.fill(arr, 9);
System.out.println("fill:" + Arrays.toString(arr));
Random random = new Random();
for (int i = 0; i < arr.length; i++) {
//使用100以内的随机数赋值数组
arr[i] = random.nextInt(101);
}
//重新赋值后的数组
System.out.println("重新赋值:" + Arrays.toString(arr));
//将索引为5的元素设为50
arr[5] = 50;
//排序
Arrays.sort(arr);
//排序后的数组
System.out.println("sort排序后:" + Arrays.toString(arr));
//查找50的位置
int i = Arrays.binarySearch(arr, 50);
System.out.println("值为50的元素索引:"+i);
//复制一份新数组
int[] newArr = Arrays.copyOf(arr, arr.length);
//比较
System.out.println("equals:"+Arrays.equals(arr, newArr));
}
}
二、字符串(java.lang.String对象)
1、创建字符串:
①String str1 = new String("a"); //不检查字符串常量池的
②String str2 = "bb"; //检查字符串常量池的
字符串池:
2、字符串不可变:
一旦觉得字符串变了的话,一定是创建了新的字符串,而不是改变了字符串。
3、字符串比较方法:equals
常量尽量写在前面:
equals不忽略大小写,equalsIgnoreCase忽略大小写。
4、字符串替换方法:replace
5、字符串切分:split
如果一定要使用英文句点,那就使用 " \\. "
6、字符串长度:int len = s.length();
字符串索引:转成数组访问 s.toCharArray();
三、StringBuffer和StringBuilder
面试官:String、StringBuffer、StringBuilder有什么区别?
https://www.cnblogs.com/songsongblue/p/9798651.html
因为String的不可变性,所以例如拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。
StringBuffer就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类,提供append和add方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列,把所有修改数据的方法都加上了synchronized。但是保证了线程安全是需要性能的代价的。
在很多情况下我们的字符串拼接操作不需要线程安全,这时候StringBuilder登场了,StringBuilder是JDK1.5发布的,它和StringBuffer本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。
StringBuilder:
一、创建Stringbuilder对象
StringBuilder strB = new StringBuilder();
1、append(String str)/append(Char c):字符串连接
System.out.println("StringBuilder:"+strB.append("ch").append("111").append('c'));
//return "StringBuilder:ch111c"
2、toString():返回一个与构建起或缓冲器内容相同的字符串
System.out.println("String:"+strB.toString());
//return "String:ch111c"
3、appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
System.out.println("StringBuilder.appendCodePoint:"+strB.appendCodePoint(2));
//return "StringBuilder.appendCodePoint:ch111c"
4、setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
strB.setCharAt(2, 'd');
System.out.println("StringBuilder.setCharAt:" + strB);
//return "StringBuilder.setCharAt:chd11c"
5、insert(int offset, String str) / insert(int offset, Char c):在指定位置之前插入字符(串)
System.out.println("StringBuilder.insertString:"+ strB.insert(2, "LS"));
//return "StringBuilder.insertString:chLSd11c"
System.out.println("StringBuilder.insertChar:"+ strB.insert(2, 'L'));
//return "StringBuilder.insertChar:chLLSd11c"
6、delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println("StringBuilder.delete:"+ strB.delete(2, 4));
//return "StringBuilder.delete:chSd11c"
总结:
1、在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁)。如常量的声明,少量的字符串操作(拼接,删除等)。
2、在单线程情况下,如有大量的字符串操作情况,应该使用StringBuilder来操作字符串。不能使用String"+"来拼接而是使用,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。如JSON的封装等。
3、在多线程情况下,如有大量的字符串操作情况,应该使用StringBuffer。如HTTP参数解析和封装等。
四、集合(长度可变)
1、ArrayList:
import java.util.ArrayList;
创建一个集合:
使用集合:add、get、size
集合存储基本类型
为什么要提供包装类呢???
一是为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化。
集合存储自定义类型对象:
2、HashSet
https://blog.csdn.net/refusing/article/details/80617783
HashSet简单的理解就是HashSet对象中不能存储相同的数据,存储数据时是无序的。
- 它存储唯一元素并允许空值
- 它由HashMap支持
- 它不保持插入顺序
- 它不是线程安全的
(1)创建:
(2)方法:
//只有当元素尚未存在于集合中时才会添加元素。如果成功添加了元素,则该方法返回true,否则返回false。
hashset.add("String Added"); //contains方法的目的是检查给定HashSet中是否存在元素。如果找到该元素,则返回true,否则返回false。
hashset.contains("String Added"); //r如果存在,remove方法将从集合中删除指定的元素。如果集合包含指定的元素,则此方法返回true。
hashset.remove("String Added"); //从集合中删除所有项目时,clear()方法
hashset.clear(); //size()识别HashSet中存在的元素数量
hashset.size() //isEmpty()确定HashSet的给定实例是否为空。如果集合不包含任何元素,则此方法返回true
hashset.isEmpty(); // Iterator()返回Set中元素的迭代器。这些元素没有特定的顺序访问,Iterator是fail-fast的。
public void whenIteratingHashSet_shouldIterateHashSet() {
Set<String> hashset = new HashSet<>();
hashset.add("First");
hashset.add("Second");
hashset.add("Third");
Iterator<String> itr = hashset.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
(3) 遍历:
法一:
法二:
(4)整型:
3、HashMap
- HashMap是一个散列表,它存储的是键值对(key-value)映射;
- HashMap的实现不是同步的,线程不安全,但是效率高;
- HashMap允许null键和null值,是基于哈希表的Map接口实现;
- 哈希表的作用是用来保证键的唯一性;
方法:
(1) 插入键值对数据: put( key, value)
(2)根据键值获取键值对值数据: get(Object key)
(3)获取Map中键值对的个数: size()
(4)判断Map集合中是否包含键为key的键值对 :containsKey(Object key)
(5)判断Map集合中是否包含值为value的键值对: containsValue(Object value)
(6)判断Map集合中是否没有任何键值对:isEmpty()
(7)清空Map集合中所有的键值对: clear()
(8)根据键值删除Map中键值对:remove(Object key)
示例:
import java.util.HashMap;
import java.util.Map; public class Demo01 { public static void main(String[] args) {
// 声明HashMap对象
Map<String,Integer> map= new HashMap<>(); //添加数据
map.put("ZhangYi",98);
map.put("WangEr",99);
map.put("ZhangShan",89);
map.put("Lisi",92); //根据键值对键值获取数据‘’
int value=map.get("Lisi");
System.out.println("kay:Lisi And value:"+value); //获取Map中键值对的个数
int size=map.size();
System.out.println("map 中的键值对个数为:"+size); //判断Map集合中是否包含键为key的键值对
boolean b1=map.containsKey("LiSI");
boolean b2=map.containsKey("Lisi");
System.out.println("是否包含键值为LiSI的键值对数据:"+b1);
System.out.println("是否包含键值为Lisi的键值对数据:"+b2); //判断Map集合中是否包含值为value的键值对
boolean b3=map.containsValue(99);
boolean b4=map.containsValue(100);
System.out.println("是否包含值为99的键值对数据:"+b3);
System.out.println("是否包含值为100的键值对数据:"+b4); //判断Map集合中是否没有任何键值对 boolean b5=map.isEmpty();
System.out.println("map中键值对数据是否为空:"+b5); //根据键值删除Map中键值对
int value2=map.remove("Lisi");
System.out.println("删除了键为Lisi的键值对数据,其值为:"+value2); boolean b6=map.containsKey("Lisi");
System.out.println("是否包含键值为Lisi的键值对数据:"+b6); //清空Map集合中所有的键值对
map.clear();
boolean b7=map.isEmpty();
System.out.println("map中键值对数据是否为空:"+b7); }
}
遍历:
(1)将Map中所有的键装到Set集合中返回-----键
Set<K> set=map. keySet()
(2)返回集合中所有的value的值的集合-----值
Collection<V> c=map.values()
(3)将每个键值对封装到一个个Entry对象中,再把所有Entry的对象封装到Set集合中返回----键值对
Set<Map.Entry<K,V>> entrys=map.entrySet()
示例:
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class Demo02 {
public static void main(String[] args) {
// 声明HashMap对象
Map<String,Integer> map= new HashMap<>(); //添加数据
map.put("ZhangYi",98);
map.put("WangEr",99);
map.put("ZhangShan",89);
map.put("Lisi",92); //(1)将Map中所有的键装到Set集合中返回
Set<String> keys=map.keySet();
for(String key:keys){
int value=map.get(key);
System.out.println("key:"+key+" and value:"+value);
} //(2)返回集合中所有的value的值的集合
Collection<Integer> values=map.values();
for(int value:values){
System.out.print(value+" ");
}
System.out.println(); //(3)将每个键值对封装到一个个Entry对象中,再把所有Entry的对象封装到Set集合中返回
Set<Map.Entry<String,Integer>> entries=map.entrySet();
for(Map.Entry<String,Integer> entry :entries){
String key=entry.getKey();
int value=entry.getValue();
System.out.println("key:"+key+" and value:"+value);
}
} }
java基础(4)---引用数据类型(数组、字符串、集合)的更多相关文章
- java基础(4):引用数据类型、流程控制语句
1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...
- Java学习笔记之:Java引用数据类型之字符串
一.简介 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串最简单的方式如下: String greeting = "H ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- Java基础(9)——数组
难点儿的已经过去啦,现在又开始基础了哈~ 之前讲变量的时候,变量是一个个的呀~,那我要搞一串变量该啷个办呢?Java给我们出了个好东西叫数组(*^▽^*) 数组呢,就是将变量一组一组的存起来,这个也是 ...
- Java基础学习之数据类型、基础语法与数组(3)
目录 1.数据类型 1.1.基本数据类型 1.2.引用数据类型 1.3.自动装箱与拆箱 2.基础语法 2.1.标识符 2.2.修饰符 2.2.1.访问控制修饰符 2.2.2.非访问控制修饰符 2.3. ...
- Java基础进阶:学生管理系统数组方式分包源码实现,教师管理系统集合和数组两种方式源码实现,图书馆管理系统源码实现,现附重难点,代码实现源码,课堂笔记,课后扩展及答案
1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...
- 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类
---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...
- Java基础教程(20)--数字和字符串
一.数字 在用到数字时,大多数情况下我们都会使用基本数据类型.例如: int i = 500; float gpa = 3.65f; byte mask = 0xff; 然而,有时候我们既需要 ...
- java基础第十二篇之集合、增强for循环、迭代器和泛型
Collection接口中的常用方法: * 所有的子类子接口都是具有的 * 集合的方法:增删改查 * * public boolean add(E e);//添加元素 返回值表示是否添加成功 * pu ...
- 夯实Java基础(一)——数组
1.Java数组介绍 数组(Array):是多个相同类型元素按一定顺序排列的集合. 数组是编程中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常我们可以通过数组元素的索引来访问 ...
随机推荐
- Java IO把一个文件中的内容以字符串的形式读出来
代码记录(备查): /** * 把一个文件中的内容以字符串的形式读出来 * * @author zhipengs * */ public class FileToString { public sta ...
- Linux中执行 .sh 的方法
linux下执行.sh文件的方法 .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限. 是bash脚本么 可以用touch test.sh #创建test.sh ...
- Dockerfile指令的使用
关于Dockerfile Dockerfile实际上就是一系列创建Docker镜像的脚本, 虽然可以通过命令行来执行, 但是那样繁琐而且容易出错. Dockerfile指令 FROM 他的意思是在创建 ...
- html5 canvas 自定义画图裁剪图片
html5 给我们带来了极大惊喜的canvas标签,有了它我们可以在浏览器客户端处理图片,不需要经过服务器周转.可以实现: 1.照片本地处理,ps有的一些基本功能都有 2.结合js可以实现一些很炫的动 ...
- redis 那些事儿
1 我的数据存入redis了但是怎么不见了? redis的内存使用是有限的,一直向redis中写入数据(如果配置了allkeyLRU)就会触发内存淘汰机制,将最近没有访问过的的key,value删除掉 ...
- java 基础 HashMap 并发扩容问题
存入的数据过多的时候,尤其是需要扩容的时候,在并发情况下是很容易出现问题. resize函数: void resize(int newCapacity) { Entry[] oldTable = ta ...
- [转帖]Red Hat K8s 关键人物 Grant Shipley 跳槽到 VMware
Red Hat K8s 关键人物 Grant Shipley 跳槽到 VMware https://news.cnblogs.com/n/641944/ 这四小时的工作效率 太无敌了.. 投递人 ...
- SpringMVC获取参数的几种方式
前言: 年末了,忙了一年了却发现系统的整理的东西很少,一些基础的东西都未做整理,这里就将它随便整理一下,增加一些印象,当然在网上看到一些好的资料也会整理下来以备后用.今天整理一下springMVC获取 ...
- oracle 常用sql 经典sql函数使用 sql语法
各种树操作, 用来查询表中带有子父节点的信息 Oracle 树操作(select-start with-connect by-prior) select m.org_id from sm_organ ...
- Python学习路线图【转载】
文章来源:https://blog.csdn.net/u014044812/article/details/88079011