Java中String,数组,集合,比较器的简单总结

Java中String,数组,集合,比较器的简单总结,第1张

Java常用语法的不完全总结(完整语法看API文档) 一、String和StringBuffer类
  1. String的强制类型转换。String不是基本数据类型,属于引用数据类型。字符串不能直接转换为基本类型,但通过基本类型对应的包装类,可以把字符串转换成基本类型。
String a = “35675”; 
int i = Integer.parseInt(a);
  1. String转换为字符数组。调用String的toCharArray();
        String a = "abcd";
        char b[] =  a.toCharArray();
  1. equals()与==的区别 String的equals()比较的是内容是否相等,”==“是比较地址值。
  2. java.lang.StringBuffer代表可变的字符序列。
二、数组
  1. 声明数组时不能指定其长度, 需要用运算符new为之分配空间,并且数组长度一旦确定,就不能修改。
  2. 二维数组是一维数组作为另一个一维数组的元素而存在。在数组底层并没有多维数组。
  3. 数组中涉及的常见算法:
    数组元素的赋值(杨辉三角、回形数等),最值、平均数、总和,排序等。
    数组的复制、反转、查找(线性查找、二分法查找)等。
  4. 工具类 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)对排序后的数组进行二分法检索指定的值。

注意:

  1. 需要调用Arrays的方法Arrays.toString(arr),不是直接arr.toString()。这样equals才是比较内容,toString才正常打印,而不是[类型@哈希值]

Object类中的equals方法和" == "作用是一样的,都是比较的是俩个对象在栈内存中存储的内存地址。而Arrays,String,Integer等一些类是重写了equals方法,才使得equals和 " == "不同,它们比较的是内容相不相等。所以当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法

三、Java集合 3.1、Collection

Collection:单列数据,定义了存取一组对象的方法的集合,是 List、Set 和 Queue的父接口。

  1. 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()返回迭代器对象,用于集合遍历
  1. 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 集合。

  1. ArrayList
    ArrayList 是 List 接口的典型实现类、主要实现类。本质上,ArrayList是对象引用的一个”变长”数组。
  2. LinkedList
    LinkedList双向链表,内部没有声明数组,而是定义了Node类型的 first 和 last,用于记录首末元素。同时,定义内部类Node,作为LinkedList中保存数据的基本结构。 对于频繁的插入或删除元素的 *** 作,建议使用LinkedList类,效率较高。
  • 新增方法:
    void addFirst(Object obj)
    void addLast(Object obj)
    Object getFirst()
    Object getLast()
    Object removeFirst()
    Object removeLast()
  1. Vector
    大多数 *** 作与ArrayList相同,区别之处在于Vector是线程安全的,避免使用。
3.1.2、Set:元素无序、不可重复的集合

set接口没有提供额外的方法

  1. HashSet
    HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。
  • HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。
  • 对于存放在Set容器中的对象,对应的类一定要重写equals()和hashCode(Object obj)方法,以实现对象相等规则。即:“相等的对象必须具有相等的散列码”。
  1. LinkedHashSet
  • LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
  • LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。
  1. TreeSet
  • TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。
  • TreeSet底层使用红黑树结构存储数据
3.2、Map

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集合
  1. 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是数组+链表+红黑树实现。
  1. TreeMap
  • TreeMap存储 Key-Value 对时,需要根据 key-value 对进行排序。TreeMap 可以保证所有的 Key-Value 对处于有序状态.
  • TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。
  1. LinkedHashMap
  • 在HashMap存储结构的基础上,使用了一对双向链表来记录添加元素的顺序.
  1. Hashtable
  • Hashtable是线程安全的。
  • Hashtable实现原理和HashMap相同,功能相同。底层都使用哈希表结构,查询速度快,很多情况下可以互用。
  • 与HashMap不同,Hashtable 不允许使用 null 作为 key 和 value
  • 与HashMap一样,Hashtable 也不能保证其中 Key-Value 对的顺序
  • Hashtable判断两个key相等、两个value相等的标准,与HashMap一致。
  1. Properties
  • Properties 类是 Hashtable 的子类,该对象用于处理属性文件
  • 由于属性文件里的 key、value 都是字符串类型,所以 Properties 里的 key 和 value 都是字符串类型
四、Java比较器

Java实现对象排序的方式有两种:

  1. 自然排序:java.lang.Comparable
  2. 定制排序:java.util.Comparator
4.1、自然排序:类实现Comparable接口排序
  • 实现 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));

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/794199.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存