- `java`集合
- 1.`Collection`
- 1.1`Iterator`
- 1.2.`List`接口
- 1.2.1`ArrayList`
- 1.2.2`LinkedList`双端链表
- 1.2.3使用`ArrayList`与`LinkedList`
- 1.2.4 `ArrayList`多线程的使用
- 1.3.`Set`接口
- 1.3.1`Hashset`
- 2.`Map`
- 2.1`HashMap`
- `Java`常用类
- 1.`Object` 类
- 2.`String`及其分支
- 3.`System`类
- 4.`Date`日期类
- Collection层次结构中的根接口,简单来说就是可foreach遍历。下面主要的两个集合类:
- List(可以重复数据,通常是有顺序的)
- Set(像数学的集合,元素不重合,也没有序号)
-
特点:Iterator 只能单向遍历,但线程安全。
-
遍历:
-
public static void main(String[] args) { ArrayListl1 = new ArrayList<>(); for (int i = 0; i < 10; i++) { l1.add(String.valueOf(i)); }//添加元素 Iterator iterator = l1.iterator();//获取迭代器 while(iterator.hasNext()){//调用hasNext()往下遍历 System.out.println(iterator.next());//输出数据 } } -
注:当集合的结构发生改变时(比如在迭代的时候删除或增加了元素),迭代器必须重新获取,否则会出现异常
-
-
常用方法:
-
方法名 效果 isEmpty 判断非空 indexOf 寻找下标 contains 是否包含某个元素 iterator 获取迭代器 clear 清空元素 clone 拷贝一个对象,是浅拷贝 size 大小 toArray 转成数组 hashCode hashcode值
-
- 常用方法
1.2.2LinkedList双端链表
- 增:add。
- 删:remove。
- 改:set。
- 查:get。
- 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
1.2.3使用ArrayList与LinkedList
- 增:add, offer, push。
- 删:poll, pop, remove。
- 改:set。
- 查:get, peek。
- 当然还有很多变种的,结尾加 First, Last 即可。
-
以下情况使用 ArrayList :
-
频繁访问列表中的某一个元素。
-
只需要在列表末尾进行添加和删除元素操作。
-
-
以下情况使用 LinkedList :
-
你需要通过循环迭代来访问列表中的某些元素。
-
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
-
-
可以通过 Collections.synchronizedList 方法,将 arrayList转换为线程安全的 list。
-
ArrayList
arrayList = new ArrayList<>(); List list = Collections.synchronizedList(arrayList);
常用方法:
-
方法名 效果 isEmpty 判断非空 contains 是否包含某个元素 iterator 获取迭代器 clear 清空元素 clone 拷贝一个对象,是浅拷贝 size 大小 toArray 转成数组 hashCode hashcode值 -
特点:增删方法都是 add, remove。没有改查方法。
- 特点:
- HashSet 基于 HashMap 来实现的,是一个无重复元素的集合。
- HashSet 允许有 null 值。
- HashSet 是无序的,即不会记录插入的顺序。
- HashSet 是线程不安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
- Map
是一种键-值映射表 - Map集合中key是唯一的,即所有键值对的key部分都不相同。
- Map接口和Collection接口没有继承关系。
Java常用类 1.Object 类
- 增:put。
- 删:remove。
- 改:replace。
- 查:get, getOrDefault, containsKey, containsValue。
- 其他常用方法:entrySet, keySet, values, isEmpty, contains, iterator, clear, clone, size, hashCode。
-
Object类是所有类的父类(隐藏),他下面的所有方法,其他的类都可以调用
-
public final native Class> getClass()//获取他的类的类型 public native int hashCode()//获取hashcode码 public boolean equals(Object obj)//判断两个obj属性是不是相等 protected native Object clone()//浅拷贝 public String toString()//转成String字符串
-
常用方法:
-
length() //获取字符串的长度 charAt() //截取一个字符 getChars()//截取多个字符 getBytes()//替代getChars()的一种方法是将字符存储在字节数组中,该方法即getBytes()。 toCharArray() //String转换成char数组 compareTo()//比较字符串 indexOf()//indexOf() 查找字符或者子串第一次出现的地 lastIndexOf()//lastIndexOf() 查找字符或者子串是后一次出现的地方。 substring() //两种形式 1:String substring(int startIndex) // 2:String substring(int startIndex,int endIndex) replace() //替换 trim() //去掉起始和结尾的空格 toLowerCase() //转换为小写 toUpperCase() //转换为大写
-
-
特点
-
String类长度是不可变的,StringBuffer和StringBuilder类长度是可以改变的;
-
StringBuffer类是线程安全的,StringBuilder不是线程安全的(意味着快);
-
特别注意String是引用类型,传地址,而且因为常量池的原因,String创建对于相同的字符串是不会直接新建的,而是指向已有的地址
-
-
字符串的创建
-
public static void main(String[] args) { String a = new String(""); StringBuffer b =new StringBuffer(""); StringBuilder c =new StringBuilder(""); }
-
-
不可实例化的System类
-
常用方法:
-
arraycopys数组拷贝
public static void main(String[] args) { int[] arr1 = { 0, 1, 2, 3, 4 }; int[] arr2 = { 9, 9, 9, 9, 9 }; System.arraycopy(arr1, 2, arr2, 0, 3); arr1[3] = 8; for (int i = 0; i < 5; i++) System.out.print(arr2[i] + " "); //2 3 4 9 9 } -
currentTimeMillis毫秒数
-
//现在常用于计时 public static void main(String[] args) { long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String hello = new String("hello"); } long end = System.currentTimeMillis(); long time = end-start; System.out.println(time); } -
exit退出虚拟机
-
-
最常用就是通过Util包下的Date类和Text包下的SimpleDateFormat来表示当前的日期
-
public static void main(String[] args) throws ParseException { Date date = new Date(); System.out.println(date.getTime()); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");//以什么样的形式来格式化 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); String format = sdf1.format(date); String format2 = sdf2.format(date); System.out.println(format);//结果2022年06月28日 14时53分30秒 System.out.println(format2);//结果2022年06月28日 }
-



