构造器必须是私有的 工具类的特征是什么?
工具类特征:
构造器必须是私有的,工具类一般不需要初始化,可以直接使用;工具类的方法必须是被static final方法修饰,保证方法不可变;不要在工具类方法中对共享变量有修改的操作,如果一定要有,必须加锁保证线程安全;工具类的所有方法都没有线程安全问题;
(资料图片仅供参考)
一、Arrays
Arrays主要提供了对数组的高效操作,包括排序、查找、填充、拷贝、相等判断等操作;
1、sort(int[] a)
1.1、JDK1.6
1.1.1、源码
// int类型数组排序public static void sort(int[] a) {sort1(a, 0, a.length);}private static void sort1(int x[], int off, int len) {// Insertion sort on smallest arrays if (len < 7) {for (int i = off; i < len + off; i++) for (int j = i; j > off && x[j - 1] > x[j]; j--) swap(x, j, j - 1); return; } // Choose a partition element, v int m = off + (len >> 1); // Small arrays, middle element if (len > 7) {int l = off; int n = off + len - 1; if (len > 40) {// Big arrays, pseudomedian of 9 int s = len / 8; l = med3(x, l, l + s, l + 2 * s); m = med3(x, m - s, m, m + s); n = med3(x, n - 2 * s, n - s, n); } m = med3(x, l, m, n); // Mid-size, med of 3 } int v = x[m]; // Establish Invariant: v* (v)* v* int a = off, b = a, c = off + len - 1, d = c; while (true) {while (b <= c && x[b] <= if="" while="" c="">= b && x[c] >= v) {if (x[c] == v) swap(x, c, d--); c--; } if (b > c) break; swap(x, b++, c--); } // Swap partition elements back to middle int s, n = off + len; s = Math.min(a - off, b - a); vecswap(x, off, b - s, s); s = Math.min(d - c, n - d - 1); vecswap(x, b, n - s, s); // Recursively sort non-partition-elements if ((s = b - a) > 1) sort1(x, off, s); if ((s = d - c) > 1) sort1(x, n - s, s);}/** * Swaps x[a] with x[b]. */private static void swap(int x[], int a, int b) {int t = x[a]; x[a] = x[b]; x[b] = t;}/** * Swaps x[a .. (a+n-1)] with x[b .. (b+n-1)]. */private static void vecswap(int x[], int a, int b, int n) {for (int i = 0; i < n; i++, a++, b++) swap(x, a, b);}/** * Returns the index of the median of the three indexed integers. */private static int med3(int x[], int a, int b, int c) {return (x[a] < x[b] ? (x[b] < x[c] ? b : x[a] < x[c] ? c : a) : (x[b] > x[c] ? b : x[a] > x[c] ? c : a));}
1.1.2、分析
(1)数组长度小于7,那么排序时基于基本的插入排序算法(2)数组长度大于7,那么在使用的优化后的快速排序,对应数组长度在7和40之间的数组,取的切分元素相对来说简单点
1.2、JDK1.7
1.2.1、源码:
public static void sort(int[] a) {DualPivotQuicksort.sort(a);}// 下面方法来自:java.util.DualPivotQuicksort#sort(int[])public static void sort(int[] a) {sort(a, 0, a.length - 1);}/** * If the length of an array to be sorted is less than this * constant, Quicksort is used in preference to merge sort. */private static final int QUICKSORT_THRESHOLD = 286;/** * The maximum number of runs in merge sort. */private static final int MAX_RUN_COUNT = 67;/** * The maximum length of run in merge sort. */private static final int MAX_RUN_LENGTH = 33;public static void sort(int[] a, int left, int right) {// Use Quicksort on small arrays if (right - left < QUICKSORT_THRESHOLD) {sort(a, left, right, true); return; } /* * Index run[i] is the start of i-th run * (ascending or descending sequence). */ int[] run = new int[MAX_RUN_COUNT + 1]; int count = 0; run[0] = left; // Check if the array is nearly sorted for (int k = left; k < right; run[count] = k) {if (a[k] < a[k + 1]) {// ascending while (++k <= right && a[k - 1] <= else="" if=""> a[k + 1]) {// descending while (++k < = right="" k="" -="">= a[k]); for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {int t = a[lo]; a[lo] = a[hi]; a[hi] = t; } } else {// equal for (int m = MAX_RUN_LENGTH; ++k <= right && a[k - 1] == a[k]; ) {if (--m == 0) {sort(a, left, right, true); return; } } } /* * The array is not highly structured, * use Quicksort instead of merge sort. */ if (++count == MAX_RUN_COUNT) {sort(a, left, right, true); return; } } // Check special cases if (run[count] == right++) {// The last run contains one element run[++count] = right; } else if (count == 1) {// The array is already sorted return; } /* * Create temporary array, which is used for merging. * Implementation note: variable "right" is increased by 1. */ int[] b; byte odd = 0; for (int n = 1; (n <<= 1) < count; odd ^= 1); if (odd == 0) {b = a; a = new int[b.length]; for (int i = left - 1; ++i < right; a[i] = b[i]); } else {b = new int[a.length]; } // Merging for (int last; count > 1; count = last) {for (int k = (last = 0) + 2; k <= count; k += 2) {int hi = run[k], mi = run[k - 1]; for (int i = run[k - 2], p = i, q = mi; i < hi; ++i) {if (q >= hi || p < mi && a[p] <= else="" if="" count="" for="" int="" i="right," lo="run[count" -="" --i="">= lo; b[i] = a[i] ); run[++last] = right; } int[] t = a; a = b; b = t; }}/** * Sorts the specified range of the array by Dual-Pivot Quicksort. * * @param a the array to be sorted * @param left the index of the first element, inclusive, to be sorted * @param right the index of the last element, inclusive, to be sorted * @param leftmost indicates if this part is the leftmost in the range */private static void sort(int[] a, int left, int right, boolean leftmost){}
在JDK7中,排序使用的双轴快速排序,其要比传统的单轴排序要快
双轴快速排序:如果数组的长度小于QUICKSORT_THRESHOLD的话就会使用这个双轴快速排序,而这个值是286
if (right - left < QUICKSORT_THRESHOLD) {sort(a, left, right, true); return;}
1.3、JDK1.8
1.3.1、源码
public static void sort(int[] a) {DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);}
DualPivotQuicksort.sort方法
private static final int QUICKSORT_THRESHOLD = 286;static void sort(int[] a, int left, int right, int[] work, int workBase, int workLen) {// Use Quicksort on small arrays,QUICKSORT_THRESHOLD为286,当要排序区间小于286时,发现调用了本类的重载sort方法 if (right - left < QUICKSORT_THRESHOLD) {sort(a, left, right, true); return; } /** * run[i] 意味着第i个有序数列开始的位置,(升序或者降序) **/ int[] run =new int[MAX_RUN_COUNT + 1]; int count=0; run[0] = left; // 检查数组是不是已经接近有序状态 for(int k = left; k < right; run[count] = k) {if(a[k] < a[k + 1]){// 升序 while(++k <= right && a[k - 1] <= else=""> a[k + 1]) {// 降序 while(++k <=right k="" -="">= a[k]); //如果是降序的,找出k之后,把数列倒置 for (int lo = run[count],hi = k;++lo < --hi) {int t = a[lo]; a[lo] = a[hi]; a[hi] = t; } } else {// 相等 for(int m = MAX_RUN_LENGTH; ++k <=right && a[k - 1] == a[k];) {// 数列中有至少MAX_RUN_LENGTH的数据相等的时候,直接使用快排。 // 这里为什么这么处理呢? if(--m == 0){sort(a, left, right, true); return; } } } /** * 数组并非高度有序,使用快速排序,因为数组中有序数列的个数超过了MAX_RUN_COUNT */ if(++count == MAX_RUN_COUNT) {sort(a, left, right, true); return; } } //检查特殊情况 if(run[count] == right++){// 最后一个有序数列只有最后一个元素 run[++count] =right; // 那给最后一个元素的后面加一个哨兵 } else if(count == 1) {// 整个数组中只有一个有序数列,说明数组已经有序啦,不需要排序了 return; } /** * 创建合并用的临时数组。 * 注意: 这里变量right被加了1,它在数列最后一个元素位置+1的位置 * 这里没看懂,没发现后面的奇数处理和偶数处理有什么不同 */ int[] b; byte odd=0; for(int n=1; (n <<= 1) < count; odd ^=1); if(odd == 0) {b=a;a= new int[b.length]; for(int i=left -1; ++i < right; a[i] = b[i]); } else {b=new int[a.length]; } // 合并 // 最外层循环,直到count为1,也就是栈中待合并的序列只有一个的时候,标志合并成功 // a 做原始数组,b 做目标数组 for(int last; count > 1; count = last) {// 遍历数组,合并相邻的两个升序序列 for(int k = (last = 0) + 2; k <= count; k += 2) {// 合并run[k-2] 与 run[k-1]两个序列 int hi = run[k], mi = run[k - 1]; for(int i = run[k - 2], p = i,q = mi; i < hi; ++i){// 这里我给源码加了一个括号,这样好理解一点。 之前总觉得它会出现数组越界问题, // 后来加了这个括号之后发现是没有问题的 if(q >= hi || (p < mi && a[p] < = else="" count="" int="" i="right," lo="run[count" --i="">= lo; b[i] = a[i]); run[++last] = right; } //临时数组,与原始数组对调,保持a做原始数组,b 做目标数组 int[] t = a; a = b; b = t; }}int length = right - left + 1;// INSERTION_SORT_THRESHOLD为47,发现当要排序的个数小于47个时,采用插入排序,采用了哨兵方法,对于新元素从他前一个一个一个比较// Use insertion sort on tiny arraysif (length < INSERTION_SORT_THRESHOLD) {if (leftmost) {/* * Traditional (without sentinel) insertion sort, * optimized for server VM, is used in case of * the leftmost part. */ for (int i = left, j = i; i < right; j = ++i) {int ai = a[i + 1]; while (ai < a[j]) {a[j + 1] = a[j]; if (j-- == left) {break; } } a[j + 1] = ai; } } else {/** * 首先跨过开头的升序的部分 */ do {if(left > right) {return; } }while(a[++left] >= a[left - 1]); /** * 这里用到了成对插入排序方法,它比简单的插入排序算法效率要高一些 * 因为这个分支执行的条件是左边是有元素的 * 所以可以直接从left开始往前查找。 */ for(int k = left; ++left <= k="++left)" int="" a1="" a2="a[left];">=a2 if(a1 < a2) {a2 = a1; a1 = a[left]; } //先把两个数字中较大的那个移动到合适的位置 while(a1 < a[--k]) {a[k + 2] = a[k]; //这里每次需要向左移动两个元素 } a[++k + 1] = a1; //再把两个数字中较小的那个移动到合适的位置 while(a2 < a[--k]) {a[k + 1] = a[k]; //这里每次需要向左移动一个元素 } a[k + 1] = a2; } int last = a[right]; while(last < a[--right]) {a[right + 1] = last; } a[right + 1] = last; } return;}
至于大过INSERTION_SORT_THRESHOLD(47)的,用一种快速排序(双轴快排)的方法:
从数列中挑出五个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
总结:插入排序,快速排序,归并排序三种排序的组合
1.4、parallelSort
并行排序,JDK1.8增加的新方法
// 并行排序的最小数组长度private static final int MIN_ARRAY_SORT_GRAN = 1 << 13;public static void parallelSort(int[] a) {int n = a.length, p, g; // 如果数据的长度小于 MIN_ARRAY_SORT_GRAN(1 << 13) if (n <= MIN_ARRAY_SORT_GRAN || // 或者当前并行度级别是 1的话,仍然使用常规的双轴快速排序 (p = ForkJoinPool.getCommonPoolParallelism()) == 1) DualPivotQuicksort.sort(a, 0, n - 1, null, 0, 0); else // 否则使用并行排序 new ArraysParallelSortHelpers.FJInt.Sorter (null, a, new int[n], 0, n, 0, ((g = n / (p << 2)) <= MIN_ARRAY_SORT_GRAN) ? MIN_ARRAY_SORT_GRAN : g).invoke();}
2、搜索:binarySearch
主要用于快速从数组中查找对应的值,如果查找到了,返回的是对应数组的下标的值;如果查询不到则返回负数;
二分查找确保数组一定是有序的,否则可能找不到对应的数据
但是该方法有有一个问题:如果一个数组当中有多个元素,其无法保证匹配的到底是哪一个
// a:我们要搜索的数组,fromIndex:从那里开始搜索,默认是0; toIndex:搜索到何时停止,默认是数组大小// key:我们需要搜索的值 // c:外部比较器private staticint binarySearch0(T[] a, int fromIndex, int toIndex, T key, Comparator c) {// 如果比较器 c 是空的,直接使用 key 的 Comparable.compareTo 方法进行排序 // 假设 key 类型是 String 类型,String 默认实现了 Comparable 接口,就可以直接使用 compareTo 方法进行排序 if (c == null) {// 这是另外一个方法,使用内部排序器进行比较的方法 return binarySearch0(a, fromIndex, toIndex, key); } int low = fromIndex; int high = toIndex - 1; // 开始位置小于结束位置,就会一直循环搜索 while (low <= low="0,high" mid="(low" int="">>> 1; T midVal = a[mid]; // 比较数组中间值和给定的值的大小关系 int cmp = c.compare(midVal, key); // 如果数组中间值小于给定的值,说明我们要找的值在中间值的右边 if (cmp < 0) low = mid + 1; // 我们要找的值在中间值的左边 else if (cmp > 0) high = mid - 1; else // 找到了 return mid; // key found } // 返回的值是负数,表示没有找到 return -(low + 1); // key not found.}
3、数据拷贝:copyOf和copyRange
拷贝整个数组:copyOf
public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy;}
拷贝部分数组:copyOfRange
// original 原始数组数据// from 拷贝起点// to 拷贝终点public static char[] copyOfRange(char[] original, int from, int to) {// 需要拷贝的长度 int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); // 初始化新数组 char[] copy = new char[newLength]; // 调用 native 方法进行拷贝,参数的意思分别是: // 被拷贝的数组、从数组那里开始、目标数组、从目的数组那里开始拷贝、拷贝的长度 System.arraycopy(original, from, copy, 0, Math.min(original.length - from, newLength)); return copy;}
基本上调用的是System.arrayCopy方法。
另外在在ArrayList的toArray方法中,其调用的也是Arrays里的copyOf方法,因为ArrayList的底层实现是数组;
4、数组填充:fill
5、数组转换为结婚:asList
public staticListasList(T... a) { return new ArrayList<>(a);}
该方法有以下需要注意的:
其返回的集合不是java.util.ArrayList的实例,而是Array的内部类:java.util.Arrays.ArrayList;java.util.Arrays.ArrayList不能对集合进行增、删操作,其没有实现AbstractList类中的add、remove方法;常见使用方法是:Listlist = new ArrayList<>(Arrays.asList(T...a));,可以将其作为参数传到对应集合的构造方法里面;
二、Collections
为方便集合操作而产生的工具类。
Collections也提供sort和binarySearch方法,其sort方法底层调用就是Arrays.sort方法,而binarySearch底层重写了二分查找算法,实现逻辑和Arrays的二分查找算法一致
1、sort()方法实现
public staticvoid sort(Listlist)
1.1、JDK1.6
1.1.1、源码
// 基本方法public staticvoid sort(Listlist) {Object[] a = list.toArray(); Arrays.sort(a); ListIteratori = list.listIterator(); for (int j=0; j<A.LENGTH; j++)="" {i.next(); i.set((T)a[j]); }}/**********************下面方法未自Arrays***********************/// 调用 Arrays.sort(Object[] a) 排序方法,This algorithm offers guaranteed n*log(n) performance.public static void sort(Object[] a) {Object[] aux = (Object[])a.clone(); mergeSort(aux, a, 0, a.length, 0);}/** * Tuning parameter: list size at or below which insertion sort will be * used in preference to mergesort or quicksort. */private static final int INSERTIONSORT_THRESHOLD = 7;/** * Src is the source array that starts at index 0 * Dest is the (possibly larger) array destination with a possible offset * low is the index in dest to start sorting * high is the end index in dest to end sorting * off is the offset to generate corresponding low, high in src */private static void mergeSort(Object[] src, Object[] dest, int low, int high, int off) {int length = high - low; // Insertion sort on smallest arrays if (length < INSERTIONSORT_THRESHOLD) {for (int i = low; i < high; i++) for (int j = i; j > low && ((Comparable) dest[j - 1]).compareTo(dest[j]) > 0; j--) swap(dest, j, j - 1); return; } // Recursively sort halves of dest into src int destLow = low; int destHigh = high; low += off; high += off; int mid = (low + high) >>> 1; mergeSort(dest, src, low, mid, -off); mergeSort(dest, src, mid, high, -off); // If list is already sorted, just copy from src to dest. This is an // optimization that results in faster sorts for nearly ordered lists. if (((Comparable) src[mid - 1]).compareTo(src[mid]) <= 0) {System.arraycopy(src, low, dest, destLow, length); return; } // Merge sorted halves (now in src) into dest for (int i = destLow, p = low, q = mid; i < destHigh; i++) {if (q >= high || p < mid && ((Comparable) src[p]).compareTo(src[q]) <= 0) dest[i] = src[p++]; else dest[i] = src[q++]; }}private static void swap(Object[] x, int a, int b) {Object t = x[a]; x[a] = x[b]; x[b] = t;}
1.2、JDK1.7
1.2.1、源码
public staticvoid sort(Listlist) {Object[] a = list.toArray(); Arrays.sort(a); ListIteratori = list.listIterator(); for (int j=0; j<A.LENGTH; j++)="" {i.next(); i.set((T)a[j]); }}//Arrays.sort方法public static void sort(Object[] a) {if (LegacyMergeSort.userRequested) legacyMergeSort(a); else ComparableTimSort.sort(a);}static final class LegacyMergeSort {private static final boolean userRequested = java.security.AccessController.doPrivileged( new sun.security.action.GetBooleanAction( "java.util.Arrays.useLegacyMergeSort")).booleanValue();}/** To be removed in a future release. */private static void legacyMergeSort(Object[] a) {Object[] aux = a.clone(); mergeSort(aux, a, 0, a.length, 0);}private static void mergeSort(Object[] src, Object[] dest, int low, int high, int off) {int length = high - low; // Insertion sort on smallest arrays if (length < INSERTIONSORT_THRESHOLD) {for (int i=low; ilow && ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--) swap(dest, j, j-1); return; } // Recursively sort halves of dest into src int destLow = low; int destHigh = high; low += off; high += off; int mid = (low + high) >>> 1; mergeSort(dest, src, low, mid, -off); mergeSort(dest, src, mid, high, -off); // If list is already sorted, just copy from src to dest. This is an // optimization that results in faster sorts for nearly ordered lists. if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {System.arraycopy(src, low, dest, destLow, length); return; } // Merge sorted halves (now in src) into dest for(int i = destLow, p = low, q = mid; i < destHigh; i++) {if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0) dest[i] = src[p++]; else dest[i] = src[q++]; }}/** * Swaps x[a] with x[b]. */private static void swap(Object[] x, int a, int b) {Object t = x[a]; x[a] = x[b]; x[b] = t;}// ComparableTimSort
1.3、JDK1.8
2、集合的最大、最小值
max方法提供了两种实现
// 没有比较器的,那么默认非泛型必须实现了Comparable接口,否则编译的时候会报错,因为其底层是调用Comparable的compareTo方法来进行比较的;// 泛型必须继承Objec且实现Comparable接口;public staticT max(Collection coll) {Iterator i = coll.iterator(); T candidate = i.next(); while (i.hasNext()) {T next = i.next(); if (next.compareTo(candidate) > 0) candidate = next; } return candidate;}// 带比较器,跟不带比较器的类似;public staticT max(Collection coll, Comparator comp) {if (comp==null) return (T)max((Collection) coll); Iterator i = coll.iterator(); T candidate = i.next(); while (i.hasNext()) {T next = i.next(); if (comp.compare(next, candidate) > 0) candidate = next; } return candidate;}
3、多张类型的集合
Collections对原始集合进行了封装,提供了:线程安全的集合、不可变的集合;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R1ReBn5L-1580104538820)(集合/image/Collections-InnerClass.png)]
3.1、线程安全的集合
线程安全的集合都是以Synchronized开头
SynchronizedListSynchronizedMapSynchronizedSetSynchronizedSortedMapSynchronizedSortedSet
上述线程安全的集合都是通过synchronized代码块来实现的,虽然都是线程安全的,但是在实际应用中避免使用这些类;
3.2、不可变集合
不可变集合都是Unmodifiable开头,这类方法的操作是会从原集合中得到一个不可变的新集合,新集合只能访问,不能修改;否则抛出异常;
UnmodifiableCollection:为只读集合
static class UnmodifiableListextends UnmodifiableCollectionimplements List{public E set(int index, E element) {// 抛出异常 throw new UnsupportedOperationException(); } public void add(int index, E element) {// 抛出异常 throw new UnsupportedOperationException(); } public E remove(int index) {// 抛出异常 throw new UnsupportedOperationException(); } public int indexOf(Object o) {return list.indexOf(o);} public int lastIndexOf(Object o) {return list.lastIndexOf(o);} public boolean addAll(int index, Collection c) {// 抛出异常 throw new UnsupportedOperationException(); } @Override public void replaceAll(UnaryOperatoroperator) {// 抛出异常 throw new UnsupportedOperationException(); } @Override public void sort(Comparator c) {// 抛出异常 throw new UnsupportedOperationException(); }}
三、Objects
1、相等
主要有两个方法:deepEquals、equals,其中deepEquals主要是判断数组的,后面equals主要判断基本类型和自定义类型的
public static boolean deepEquals(Object a, Object b) {if (a == b) return true; else if (a == null || b == null) return false; else return Arrays.deepEquals0(a, b);}public static boolean equals(Object a, Object b) {return (a == b) || (a != null && a.equals(b));}
2、判空
Objects.isNull(Object obj)Objects.nonNull(Object obj)Objects.requireNonNull(T obj)Objects.requireNonNull(T obj, String message)Objects.requireNonNull(T obj, SuppliermessageSupplier)
标签:
相关推荐:
精彩放送:
- []LeetCode实战:row_number函数用法
- []常用的shell脚本 linux脚本之间的传递参数
- []【教程】矩阵相乘时 我们先写位移再缩放
- []立大志,明大德,成大才,延安红街能赋予你无穷的向上力量
- []【当前热闻】2月3日汇市观潮:欧元、英镑和日元技术分析
- []【世界播资讯】数据字典中的同义词:user_synonyms
- []当前观察:美原油交易策略:非农或无力拯救油价,周线或迎两连跌
- []前沿资讯!厦门出台保障性租赁住房优惠政策 包含金融、土地、税费等方面
- []当前观察:187亿美元!康菲石油2022年利润翻倍 加入石油巨头大丰收队列
- []现货黄金交易策略:决战非农,金价面临大跌风险?
- []世界简讯:常润股份:公司已预约于2023年4月11日披露2022年报
- []元道通信:公司目前该项目合作已经终止。相关信息以公司在巨潮网披露的公告为准祝您生活愉快
- []微速讯:青岛某共有产权房“爆雷”?城投公司回应来了
- []上海杨浦保障性租赁住房112项目复工 建成后可提供332套
- []头条:降息潮下,存量房房贷能降吗?
- []【世界播资讯】钦州:“十四五”期间保障性租赁住房发展目标为3000套(间)
- []天天播报:双乐股份:相比印度,公司在持续供货能力和供货的及时性、产品的环保性、齐全性和质量稳定性上具有较大优势
- []社保卡怎么绑定银行卡(社保卡重新绑定银行卡)
- []去银行存钱可以特批信用卡不(储蓄卡存钱可以办信用卡吗)
- []天天即时看!人没到60岁死了农村养老保险白交了吗(人没到60岁死了社保白交了吗)
- []今日热讯:高凤笃学诵读翻译_高凤痴迷诵读译文
- []每日速递:中金:对港股维持积极看法
- []速读:宁波购房最高送18万消费券!
- []头条焦点:黄金因获利了结回调,专家仍看好其2023年表现!
- []全球实时:浩洋股份:公司目前两个提升产能的募投项目正在有序加快推进中,项目投产后将为公司提升较大的产能
- []世界观速讯丨力合科技:公司坚持以自主创新为主的技术发展战略,研发生产具有自主知识产权的国产化仪器设备
- []尚品宅配8亿元定增募资获深交所通过
- []环球简讯:地产“阳康”了吗?
- []纽泰格:公司目前已与部分空气悬架客户在业务洽谈中,已经被纳入供应商体系
- []效仿恒大?石家庄房企润江集团要搞新能源汽车,焦贺钱从哪来
- []快报:今年1月楼市低迷 内房股多数受压 合景泰富集团(01813)跌6.83%
- []观热点:房企年内融资已近900亿元
- []世界今亮点!硕贝德:公司持续批量为北美客户提供了ARVR天线及散热产品
- []环球视讯!【BT金融分析师】Carvana股价暴涨108%,分析师称上演了一幕绝地求生的戏码
- []新资讯:一张图:黄金原油外汇股指"枢纽点+多空占比"一览(2023/02/03周五)
- []全球热文:* 理想汽车跌超5%,成交额超4.70亿港元
- []今日讯!这家储能公司境外毛利率超境内3倍
- []播报:原单位社保不给减员怎么办(停保不给办减员怎么办)
- []全球关注:锂电材料产销量增长 贝特瑞2022年预盈超21亿元
- []消息!60MW/120MWh储能电站投产!
- []怎样用花呗还信用卡还款(怎样用花呗还信用卡还款)
- []平安产险正式编制员工待遇(平安集团b类员工薪酬)
- []天天新动态:信用卡最高可分期金额什么意思呀(信用卡最高可分期金额什么意思)
- []出租车挡道被消防车剐蹭后负全责详细内容
- []环球热门:中南建设:1月合同销售金额32.4亿元
- []全球视讯!中英科技:截至1月31日,公司股东总数为11501户
- []当前视点!中粮置业40亿元小公募债券获深交所通过
- []当前关注:江西全省2023年度保障性租赁住房筹集(开工)目标任务为165766套(间)
- []世界通讯!香港一月一手私宅买卖起步回升 录341宗
- []隔离霜和防晒霜一样吗?隔离霜和防晒霜的区别是什么?
- []热消息:华润置地48.8亿港元认购香港14.7万平商住项目45%股权
- []当前滚动:新年祝福怎么写?新年对同事的祝福语有哪些?
- []六一儿童节给心仪的女朋友送什么礼物?适合送女朋友的礼物推荐
- []国内光刻气产品进入ASML供应链!电子特气国产替代将加速提升
- []【世界聚看点】宁德时代回应海外上市
- []世界快资讯:千山暮雪刘恺威大结局是什么?千山暮雪剧情介绍
- []全球微动态丨阳光车险和平安车险哪个好一点(平安车险和人保车险哪个好)
- []曹操墓是怎么发现的?曹操墓在哪里?
- []环球速看:兰州至西藏经过哪里?自驾游经过的地方有哪些?
- []环球微头条丨国轩电池装车易捷特,进入雷诺-日产-三菱联盟供应商体系
- []【世界速看料】男士t恤哪个牌子好?男士t恤较好的品牌有哪些?
- []街篮手游哪个中锋好?最强中锋有哪些推荐?
- []天天快报!成语壮志凌云是什么意思?壮志凌云出自哪里?
- []北京社保还有存折吗(北京社保卡没有存折能用吗)
- []全球热门:浙江景宁绿电100%泛微网工程正式投运
- []天天最新:燃料电池企业“签约潮”背后
- []世界百事通!企事业养老金什么时候并轨(企事业单位养老金并轨实施时间)
- []6.5亿元!江特电机拟在江西高安投建年产3万吨碳酸锂项目
- []最资讯丨华菱线缆:公司未参加该项目投标
- []财面儿|景瑞控股1月合约销售额3.42亿元
- []讯息:港1月住宅楼宇买卖合约3051份 按月上升21.7%
- []天天简讯:首钢商业地产6.36亿元ABS状态更新为“已受理”
- []前沿热点:成都城建30亿元供应链ABS项目状态更新为“已反馈”
- []全球看热讯:家居丨东方雨虹:控股股东李卫国1637.43万股股份质押展期
- []当前观点:恩捷股份:公司各项生产经营活动均有序进行;隔膜产品可存放时间较长
- []快可电子:今年将有上海光伏展、德国慕尼黑光伏展、各级光伏协会等机构举办的展会
- []勘设股份:投资者朋友截至2023年1月20日,公司股东总户数为22436
- []香港旅游业用工需求大增,迪士尼乐园开过万月薪招服务员且无学历要求
- []环球观点:湖北大悟抽水蓄能电站项目开工
- []焦点观察:农业户口买房能否办理银行按揭贷款
- []【环球快播报】华夏航空:遭处罚?
- []3年漫长资产重组收尾,云南城投从此不再是“房企”
- []全球快资讯丨房企去年业绩分化明显:28家预盈、36家预亏总额超千亿
- []洪汇新材:截至2023年1月31日,公司股东人数为10,151户
- []今日聚焦!龙洲股份:公司现代物流业务涵盖了沥青供应链、港口码头综合服务、物流园区经营等
- []当前视点!“招沪籍单身,酬金20万”,上海10万+红盘的工地外,有人做起了房票买卖生意
- []快手上的内科医生刘勇刚——尽职尽责,精益求精
- []众业达:投资者朋友截至目前,公司无AIGC技术应用及技术储备
- []标准股份:截至2023年1月31日,公司股东人数约为2.51万户
- []【焦点热闻】每经热评|提前还房贷人群增多 说明“房住不炒”收到了实效
- []如何正确应对流感问题?流感灵胶囊提供专业助力
- []集中供地制度被取消?权威部门回应
- []世界500强巨鳄入场!306亿储能电池超级工厂落地!
- []每日热点:丰元(云南)年产20万吨磷酸铁锂正极材料项目一期投产
- []海基新能源推出首款375Ah大容量储能电芯和钠离子电池
- []天天热门:甘肃省宕昌抽水蓄能电站预可研审查会议召开
- []滚动:鼎胜新材与LG新能源签约 四年提供约6.1万吨锂电池铝箔
- []个人参保日期和首次参保日期不同(参工时间和参保时间不一致怎么办)
- []【世界聚看点】一份文件流传开来,集中供地制度要取消?专家回应:不可能
- []环球消息!豪森股份:豪森公司通过为客户提供汽车生产制造“软硬结合”一体化的制造解决方案获得营业收入及利润
- B站注册资本增幅400%至5亿 目前由陈睿全资持股
- 光源资本出任独家财务顾问 沐曦集成电路10亿元A轮融资宣告完成
- 巨轮智能2021年上半年营收11.24亿元 期内研发费用投入增长19.05%
- 红枣期货尾盘拉升大涨近6% 目前红枣市场总库存约30万吨
- 嘉银金科发布2021年Q2财报 期内净利润达1.27亿元同比增长208%
- 成都银行2021上半年净利33.89亿元 期内实现营收同比增长17.27亿元
- 汽车之家发布2021年第二季度业绩 期内新能源汽车品牌收入增长238%
- 中信银行上半年实现净利润290.31亿元 期末不良贷款余额706.82亿元
- 光伏概念掀起涨停潮交易价格创新高 全天成交额达1.29亿元
- 上半年生物药大增45% 关键财务指标好转营收账款持续下降
- 环球视点!10万股东请留意!两家A股公司同日公告触及退市!这些公司也拉响警报(名单)
- 环球视讯!杭州:截至2022年底累计筹集保障性租赁住房房源14.6万套
- 全球信息:福蓉科技:截至2023年1月31日股东数为16656户
- 有小额贷款可以申请车贷吗(有小额贷款可以申请车贷吗)
- 全球今头条!音像资料
- 每日关注!深圳社保转到惠州去怎么转的(深圳社保转到惠州去怎么转)
- 游客行李被酒店清出房间、司机中途甩客,西双版纳旅游乱象频现
- 社保绑定的银行卡能取钱吗(社保卡绑定银行卡可以取钱吗)
- 世界报道:无锡建投20亿元小公募项目状态更新为“已反馈”
- 每日头条!星巴克第一财季全球净新开459家门店 中国门店总数达6090家
- 【焦点热闻】珠海华发集团15亿元公司债将于2月6日付息 票面利率为4.32%
- 环球动态:最新龙虎榜:机构买入云从科技超1亿,知名游资买入蓝英装备
- 不是厦门户口去鼓浪屿去哪个码头(非厦门户口去鼓浪屿从哪个码头)
- 每日时讯!乙肝医保能报销吗(乙肝门诊检查费用能报销吗)
- 中国人寿为什么在美国上市(中国人寿为什么在美国上市)
- 微资讯!乙肝干扰素2022年能报销吗医保(乙肝干扰素2022年能报销吗)
- 当前头条:北京医保存折和医保卡里的钱一样吗(北京医保存折和卡有什么区别)
- 天天快资讯:信用卡追回利息对卡有影响吗(信用卡退息对信用卡有影响吗)
- 体外碎石可以医保报销吗(门诊做体外碎石住院医保能报销吗)
- 今日最新!车保险理赔流程怎么赔付
- 世界快看:财意险都是包括什么
- 【独家焦点】楼市观察丨金光华再推别墅“回锅” 2022深圳楼市中的冷热参差
- 运险费是退货时不用付运费吗
- 最新资讯:英力特:截止2023年1月31日,公司股东总数为29,360
- 天天观天下!在海洋运输货物保险中,共同海损属于
- 30岁女子养胃2年,胃炎反而加重,医生:这1水或是胃炎“加速器”
- 环球信息:二连浩特向浩贸易有限公司
- 上海平安银行是正规银行吗(平安银行是正规银行吗2020)
- 全球快播:海德股份:2月1日公司高管曹体伦、廖绪文增持公司股份合计4.17万股
- 栖霞建设:副总裁汤群辞职
- 头条:科伦药业:2月1日公司高管冯昊、赖德贵增持公司股份合计7.4万股
- 全球消息!CBA新消息!篮协再颁新规,辽篮又被针对,广东男篮成赢家
- 五险能单独买几项吗(五险能单独买几项吗)
- 证监会:在促进房地产平稳健康发展等重点领域推出更多务实举措
- 当前快讯:证监会:稳妥有序化解私募基金、债券违约等重点领域风险
- 九典制药:2月1日公司高管段立新减持公司股份合计130.03万股
- ST路通:2月1日公司高管庄小正减持公司股份合计2万股
- 华夏幸福49.6亿美元债以发新债券向债权人分配方式实施重组交割
- 世界快资讯丨深房中协:严禁房地产中介机构等参与违规利用“经营贷”
- 热资讯!顺丰同城:转换H股将于2月7日在联交所上市
- 【环球热闻】ST商城下修2022年业绩预告 预计亏损额增至2.28亿元左右
- 泰福泵业:2月1日公司高管毛世良减持公司股份合计2万股
- 全球资讯:66鸿运b型保险98版利差返还型怎么样(鸿运a型保险98版利差返还型领取)
- 60岁前身故社保退多少钱一个月(人去世社保卡怎么退保)
- 全球热议:如何投诉光大信用卡(怎么投诉光大信用卡银行)
- 行动教育:1月18日至1月31日公司高管李宜增持公司股份合计8000股
- 北辰实业:北辰集团委托北辰商管提供辰运物业及亚市管理服务
- 泰禾智能:2月1日公司高管王金诚减持公司股份合计47.75万股
- 每日时讯!奥来德股东曲志恒减持7350股 套现41.7万 2022年前三季度公司净利1.12亿
- 【全球报资讯】铂力特:2月2日公司高管雷开贵减持公司股份合计10万股
- 全球热讯:天津中绿电:不存在房地产业务及募资投入房地产情况
- 今日热文:中南建设1月合同销售金额32.4亿 同比下滑近三成
- 每日快看:省广集团:公司根据客户需求开展相关业务
- 全球今亮点!华侨城“18侨城03”公司债将兑付并摘牌 存续规模0.4亿元
- 三部门联合发布高森林火险橙色预警
- 世界速讯:中南建设近期累计被动减持约1.63亿股 占总股本4.26%
- 焦点速看:安达维尔:2022年度公司营收情况请关注公司将于4月18日在巨潮资讯网披露的年度报告
- 每日快报!为什么养老保险和医疗保险月份不一样(为什么养老保险和医疗保险月份不一样)
- 全球快资讯:信贷公司贷款收取多少手续费合适(信贷公司贷款收取多少手续费合理)
- 环球报道:华贸物流:股东计划减持公司股份 累计拟减持不超过93.03万股
- 天天新资讯:醋化股份:2月2日公司高管庆九、帅建新、钱进、薛金全、顾清泉、丁彩峰减持公司股份合计408.96万股
- 【环球快播报】百纳千成:影视项目的最新动态请关注公司官网或公司微信公众号“百纳千成”
- 【世界播资讯】锦和商管向北京亿鹏所提供2300万元财务资助 已全部转为股权转让款
- 全球视点!福建投资开发5亿元公司债券将付息 利率3.69%
- 创世纪:公司五轴机床正持续开发中,部分型号已进入小批量生产阶段;3C类机床订单尚在逐步恢复中
- 天天要闻:迈普医学:公司产品有在部队医院中使用
- 酒店业率先复苏,超七成企业春节营收恢复至疫前
- 精选!民生信用卡最低还款额及利息怎么计算的(民生信用卡还款额度计算方法)
- 微动态丨中国人寿人士助理(中国人寿人事助理是做什么)
- 当前讯息:肋间神经炎
- 最资讯丨新地NOVO LAND 第2B期已取得预售楼花同意书
- 天天看热讯:景瑞控股1月合约销售额3.42亿元 同比下降46%
- 焦点速递!顾家家居:截止2023年1月底已累计回购54.53万股 耗资逾2000万元
- 郑中设计:截至2023年1月31日公司股东人数为13,096户
- 每日看点!青岛市一季度394个城市更新建设项目集中开工
- 新资讯:旷达科技:芯投微及其控股公司产品已有用于模组的批量订单
- 世界快报:天虹股份:一期增持计划所持公司162万股非交易过户已登记完成
- 世界快看点丨百联股份:公司将严格按照上交所的相关规定履行信息披露义务
- 155亿之后又108亿!你投的嘛,偶像!
- 全球热点!充电桩建设既要速度更要质量
- 环球热门:比亚迪股份有限公司董事长兼总裁王传福:打造新能源汽车王牌
- 赣锋去年净利预计超180亿元,同比增长最高320%
- 年满60岁可以参加职工医保吗(满了60岁能买职工医保吗)
- 天天微资讯!早上可以还信用卡吗(信用卡还款日凌晨就能还款吗)
- 佛山村田五矿精密材料有限公司关于绿色电力供应的合同签订到2030年,实现100%绿色电力生产
- 沧州明珠2022年目标销售2.86亿㎡隔膜 拟受让明珠锂电10%股权
- 2023原油市场展望,中海油的投资机会
- 当前快看:上游震荡博弈 光伏组件定价遇阻观望(2023.2.2)
- 环球速讯:TOP10的变与不变!2022中国市场动力电池装机解析
- 每日动态!1.47GW!国华投资发布2023年第一批光伏组件(182、210)采购项目
- 山羊胡子怎么画?山羊胡子的画法?
- 通讯!网络中tag什么意思?网络中tag是指什么?
- 孤战的演员有哪些?孤战剧情介绍
- 每日热门:重案六组佟林是好是坏?重案六组佟林扮演者是谁?
- 世界快资讯:气功大师王林有什么本事?王林资料介绍
- 创造营王艺晨为什么退赛?创造营节目组给出的理由是什么?
- 北京海淀成为全国首个生产总值破万亿的地市级区县
- 【聚看点】2月2日焦点科技涨停分析:跨境电商,医疗信息化,金融科技概念热股
- 全球观察:关于雷锋的资料有哪些?雷锋的故事有哪些?
- 每日热门:网络上曹县是什么梗?曹县是什么意思?