length, length() 与 size() 的区别
关于length
- 它针对的是对象是【数组】
- 它是【属性】
String [] array = {"str1","str2","str3"};
System.out.println(array.length); //3
关于length()
- 它针对的是对象是【字符串String】
- 它是【方法】
String string = "string";
System.out.println(string.length()); //6
关于size()
- 它针对的是对象是【集合】
- 它是【方法】
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list.size()); //3
HashMap和HashSet的区别
HashMap
- HashMap 实现了
Map 接口
,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null。 - HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
- Map中不允许重复的键。
HashSet
-
HashSet
实现来 Set 接口
。 -
HashSet 是一个
不允许有重复元素
的集合。 -
HashSet
允许有 null
值。 -
HashSet 是
无序
的,即不会记录插入的顺序。 -
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
方法:
添加
元素可以使用add()
方法,当元素值重复时则会立即返回false,如果成功添加的话会返回true。- 使用
contains()
方法来判断元素是否存在于集合
当中 - 使用
remove()
方法来删除
集合中的元素 删除
集合中所有元素
可以使用clear
方法计算
HashSet 中的元素数量
可以使用size()
方法- 使用
for-each
来迭代
HashSet 中的元素
public class RunoobTest {
public static void main(String[] args) {
Set<String> sites = new HashSet<String>();
//HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Tencent");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Taobao"); // 重复的元素不会被添加
sites.remove("Zhihu"); //删除元素,删除成功返回 true,否则为 false
System.out.println("This contains Tencent: " + sites.contains("Tencent")); //true
for (String i : sites) {
System.out.print(i + " "); //Google Tencent Taobao
}
}
}
List 与 Set 的区别
List和Set是用来存放集合的接口
,并且二者都继承
自接口Collection。
List
在 List 中的元素存放是有序
的,可以存放重复
的元素,检索效率较高,插入删除效率较低。
ArrayList、LinkedList
是 List 的两个实现类。
- ArrayList:底层的实现就是一个
可变数组
非同步实现,元素存储的位置是连续
。检索效率较高,插入删除效率较低。
//默认创建一个ArrayList集合
List<String> list = new ArrayList<String>();
//创建一个初始化长度为100的ArrayList集合
List<String> initlist = new ArrayList<String>(100);
- LinkedList:底层实现是
双向循环链表数据结构
非同步实现。元素存储位置是不连续
的,插入删除的执行效率高,查询效率低。
List<String> stringList = new LinkedList<String>();
Set
在 Set 中的元素存放是无序
的,不可存放重复
的元素,检索效率较低,插入删除效率较高。
set 遍历只能用迭代
,没有下标。
- HashSet:底层由哈希表(实际上是一个HashMap实例)支持,不能保证元素的顺序,
元素是无序的,可以有null,但是null只能有一个,不能有重复的元素
。HashSet不是同步的,需要外部保持线程之间的同步问题。 - TreeSet:实现了 SortedSet 接口,它是一个
有序的集合类
,TreeSet 的底层是通过TreeMap实现的。TreeSet 并不是根据插入的顺序来排序,而是根据实际的值的大小来排序
。TreeSet也支持两种排序方式:自然排序和自定义排序。不能放入重复元素和null。
Character 类
- Character 类用于对单个字符进行操作。
- Character 类在对象中包装一个基本类型 char 的值
Character类提供了一系列方法来操纵字符。你可以使用Character的构造方法创建一个Character类对象,例如:
Character ch = new Character(‘a’);
转义序列
前面有反斜杠(\)的字符代表转义字符
,它对编译器来说是有特殊含义的。
Character 方法
- Character.
isLetter(char ch)
: 是否是一个字母 - Character.
isDigit(char ch)
: 是否是一个数字字符 - Character.
isWhitespace(char ch)
: 是否是一个空白字符 - Character.
isUpperCase(char ch)
: 是否是大写字母 - Character.
isLowerCase(char ch)
: 是否是小写字母 - Character.
toUpperCase(char ch)
: 指定字母的大写形式 - Character.
toLowerCase(char ch)
: 指定字母的小写形式
System.out.println(Character.isLetter('a')); //true
System.out.println(Character.isDigit('a')); //false
System.out.println(Character.isWhitespace('a')); //false
System.out.println(Character.isUpperCase('a')); //false
System.out.println(Character.isLowerCase('a')); //true
System.out.println(Character.toUpperCase('a')); //'A'
System.out.println(Character.toLowerCase('a')); //'a'