
- String的强制类型转换。String不是基本数据类型,属于引用数据类型。字符串不能直接转换为基本类型,但通过基本类型对应的包装类,可以把字符串转换成基本类型。
String a = “35675”;
int i = Integer.parseInt(a);
- String转换为字符数组。调用String的toCharArray();
String a = "abcd";
char b[] = a.toCharArray();
- equals()与==的区别 String的equals()比较的是内容是否相等,”==“是比较地址值。
- java.lang.StringBuffer代表可变的字符序列。
- 声明数组时不能指定其长度, 需要用运算符new为之分配空间,并且数组长度一旦确定,就不能修改。
- 二维数组是一维数组作为另一个一维数组的元素而存在。在数组底层并没有多维数组。
- 数组中涉及的常见算法:
数组元素的赋值(杨辉三角、回形数等),最值、平均数、总和,排序等。
数组的复制、反转、查找(线性查找、二分法查找)等。 - 工具类 java.util.Arrays的常用方法:
| 方法的定义 | 功能 |
|---|---|
| boolean equals(int[] a,int[] b) | 判断两个数组是否相等。 |
| String toString(int[] a) | 输出数组信息。 |
| void fill(int[] a,int val) | 将指定值填充到数组之中。 |
| void sort(int[] a) | 对数组进行排序(升序)。 |
| int binarySearch(int[] a,int key) | 对排序后的数组进行二分法检索指定的值。 |
注意:
- 需要调用Arrays的方法Arrays.toString(arr),不是直接arr.toString()。这样equals才是比较内容,toString才正常打印,而不是[类型@哈希值]
Object类中的equals方法和" == "作用是一样的,都是比较的是俩个对象在栈内存中存储的内存地址。而Arrays,String,Integer等一些类是重写了equals方法,才使得equals和 " == "不同,它们比较的是内容相不相等。所以当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法
三、Java集合 3.1、CollectionCollection:单列数据,定义了存取一组对象的方法的集合,是 List、Set 和 Queue的父接口。
- Collection 接口方法
| 方法 | 功能 |
|---|---|
| add(Object obj), addAll(Collection coll) | 添加 |
| int size() | 获取有效元素的个数 |
| void clear() | 清空集合 |
| boolean isEmpty() | 是否是空集合 |
| boolean contains(Object obj) | 是否包含某个元素 |
| boolean containsAll(Collection c) | 拿两个集合的元素挨个比较。 |
| boolean remove(Object obj) | 删除(只删除找到的第一个元素) |
| boolean removeAll(Collection coll) | 取当前集合的差集 |
| boolean retainAll(Collection c) | 取两个集合的交集 |
| boolean equals(Object obj) | 集合是否相等 |
| Object[] toArray() | 转成对象数组 |
| hashCode() | 获取集合对象的哈希值 |
| iterator() | 返回迭代器对象,用于集合遍历 |
- Iterator迭代器接口
- 集合遍历方法一般有使用iterator,foreach和for。
- 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
- Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法。
Iterator iterator = coll.iterator();
//hasNext():判断是否还有下一个元素
while(iterator.hasNext()){
//next():①指针下移 ②将下移以后集合位置上的元素返回
System.out.println(iterator.next());
}
//删除
Iterator iter = coll.iterator();//回到起点
while(iter.hasNext()){
Object obj = iter.next();
if(obj.equals("Tom")){
iter.remove();
}
}
3.1.1、List:元素有序、可重复的集合
List除了从Collection继承的方法外,List 里添加了一些根据索引来 *** 作集合元素的方法。
| 方法 | 功能 |
|---|---|
| void add(int index, Object ele) | 在index位置插入ele元素 |
| boolean addAll(int index, Collection eles) | 从index位置开始将eles中的所有元素添加进来 |
| Object set(int index, Object ele) | 设置指定index位置的元素为ele |
| Object get(int index) | 获取指定index位置的元素 |
| int indexOf(Object obj) | 返回obj在集合中首次出现的位置 |
| int lastIndexOf(Object obj) | 返回obj在当前集合中末次出现的位置 |
| Object remove(int index) | 移除指定index位置的元素,并返回此元素 |
| List subList(int fromIndex, int toIndex) | 返回从fromIndex到toIndex位置的子集合 |
注:Arrays.asList()方法返回的 List 集合,既不是 ArrayList 实例,也不是Vector 实例。Arrays.asList()返回值是一个固定长度的 List 集合。
- ArrayList
ArrayList 是 List 接口的典型实现类、主要实现类。本质上,ArrayList是对象引用的一个”变长”数组。 - LinkedList
LinkedList双向链表,内部没有声明数组,而是定义了Node类型的 first 和 last,用于记录首末元素。同时,定义内部类Node,作为LinkedList中保存数据的基本结构。 对于频繁的插入或删除元素的 *** 作,建议使用LinkedList类,效率较高。
- 新增方法:
void addFirst(Object obj)
void addLast(Object obj)
Object getFirst()
Object getLast()
Object removeFirst()
Object removeLast()
- Vector
大多数 *** 作与ArrayList相同,区别之处在于Vector是线程安全的,避免使用。
set接口没有提供额外的方法
- HashSet
HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。
- HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。
- 对于存放在Set容器中的对象,对应的类一定要重写equals()和hashCode(Object obj)方法,以实现对象相等规则。即:“相等的对象必须具有相等的散列码”。
- LinkedHashSet
- LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
- LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。
- TreeSet
- TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。
- TreeSet底层使用红黑树结构存储数据
Map:双列数据,保存具有映射关系“key-value对”的集合
- Map 中的 key 和 value 都可以是任何引用类型的数据
- Map 中的 key 用Set来存放,不允许重复、
常用方法
| 方法名 | 功能 |
|---|---|
| Object put(Object key,Object value) | 将指定key-value添加到(或修改)当前map对象中 |
| void putAll(Map m) | 将m中的所有key-value对存放到当前map中 |
| Object remove(Object key) | 移除指定key的key-value对,并返回value |
| void clear() | 清空当前map中的所有数据 |
| Object get(Object key) | 获取指定key对应的value |
| boolean containsKey(Object key) | 是否包含指定的key |
| boolean containsValue(Object value) | 是否包含指定的value |
| int size() | 返回map中key-value对的个数 |
| boolean isEmpty() | 判断当前map是否为空 |
| boolean equals(Object obj) | 判断当前map和参数对象obj是否相等 |
| Set keySet() | 返回所有key构成的Set集合 |
| Collection values() | 返回所有value构成的Collection集合 |
| Set entrySet() | 返回所有key-value对构成的Set集合 |
- HashMap
- 所有的key构成的集合是Set:无序的、不可重复的。所以,key所在的类要重写:equals()和hashCode()
- 所有的value构成的集合是Collection:无序的、可以重复的。所以,value所在的类要重写:equals()
- 一个key-value构成一个entry,所有的entry构成的集合是Set:无序的、不可重复的
- HashMap 判断两个 key 相等的标准是:两个 key 通过 equals() 方法返回 true,hashCode 值也相等。
- HashMap 判断两个 value相等的标准是:两个 value 通过 equals() 方法返回 true。
- HashMap是数组+链表+红黑树实现。
- TreeMap
- TreeMap存储 Key-Value 对时,需要根据 key-value 对进行排序。TreeMap 可以保证所有的 Key-Value 对处于有序状态.
- TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。
- LinkedHashMap
- 在HashMap存储结构的基础上,使用了一对双向链表来记录添加元素的顺序.
- Hashtable
- Hashtable是线程安全的。
- Hashtable实现原理和HashMap相同,功能相同。底层都使用哈希表结构,查询速度快,很多情况下可以互用。
- 与HashMap不同,Hashtable 不允许使用 null 作为 key 和 value
- 与HashMap一样,Hashtable 也不能保证其中 Key-Value 对的顺序
- Hashtable判断两个key相等、两个value相等的标准,与HashMap一致。
- Properties
- Properties 类是 Hashtable 的子类,该对象用于处理属性文件
- 由于属性文件里的 key、value 都是字符串类型,所以 Properties 里的 key 和 value 都是字符串类型
Java实现对象排序的方式有两种:
- 自然排序:java.lang.Comparable
- 定制排序:java.util.Comparator
- 实现 Comparable 的类必须实现compareTo(Object obj) 方法,两个对象即通过compareTo(Object obj)方法的返回值来比较大小。如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。
- 实现Comparable接口的对象列表和数组可以通过 Collections.sort 或Arrays.sort进行自动排序。
- 已实现Comparable 的类
String(按照字符串中字符的Unicode值进行比较)
Character(按照字符的Unicode值来进行比较)
BigInteger、BigDecimal以及数值类型对应的包装类(按照它们对应的数值大小进行比较)
Boolean(true对应的包装类实例大于 false 对应的包装类实例)
Date、Time等(后面的日期时间比前面的日期时间大)
class Goods implements Comparable {
private String name;
private double price;
//按照价格,比较商品的大小
@Override
public int compareTo(Object o) {
if(o instanceof Goods) {
Goods other = (Goods) o;
if (this.price > other.price) {
return 1;
} else if (this.price < other.price) {
return -1;
}
return 0;
}
throw new RuntimeException("输入的数据类型不一致");
}
//构造器、getter、setter、toString()方法略
}
4.2、定制排序:使用 Comparator 的对象来排序
- 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。
- 可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。
Goods[] all = new Goods[4];
all[0] = new Goods("War and Peace", 100);
all[1] = new Goods("Childhood", 80);
all[2] = new Goods("Scarlet and Black", 140);
all[3] = new Goods("Notre Dame de Paris", 120);
Arrays.sort(all, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Goods g1 = (Goods) o1;
Goods g2 = (Goods) o2;
return g1.getName().compareTo(g2.getName());
}
});
System.out.println(Arrays.toString(all));
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)