diff --git a/hutool-core/src/main/java/cn/hutool/core/builder/EqualsBuilder.java b/hutool-core/src/main/java/cn/hutool/core/builder/EqualsBuilder.java
index bb7c7e46c..e68ccdf38 100644
--- a/hutool-core/src/main/java/cn/hutool/core/builder/EqualsBuilder.java
+++ b/hutool-core/src/main/java/cn/hutool/core/builder/EqualsBuilder.java
@@ -70,7 +70,7 @@ public class EqualsBuilder implements Builder
this
object
+ * @param lhs {@code this} object
* @param rhs the other object
* @return the pair
*/
@@ -82,15 +82,15 @@ public class EqualsBuilder implements Builder
- * Returns true
if the registry contains the given object pair.
+ * Returns {@code true} if the registry contains the given object pair.
* Used by the reflection methods to avoid infinite loops.
* Objects might be swapped therefore a check is needed if the object pair
* is registered in given or swapped order.
*
this
object to lookup in registry
+ * @param lhs {@code this} object to lookup in registry
* @param rhs the other object to lookup on registry
- * @return boolean true
if the registry contains the given object.
+ * @return boolean {@code true} if the registry contains the given object.
* @since 3.0
*/
static boolean isRegistered(final Object lhs, final Object rhs) {
@@ -108,7 +108,7 @@ public class EqualsBuilder implements Builderthis
object to register
+ * @param lhs {@code this} object to register
* @param rhs the other object to register
*/
static void register(final Object lhs, final Object rhs) {
@@ -131,7 +131,7 @@ public class EqualsBuilder implements Builder
* Used by the reflection methods to avoid infinite loops.
*
- * @param lhs This method uses reflection to determine if the two This method uses reflection to determine if the two {@code Object}s
* are equal. It uses It uses {@code AccessibleObject.setAccessible} to gain access to private
* fields. This means that it will throw a security exception if run under
* a security manager, if the permissions are not set up correctly. It is also
* not as efficient as testing explicitly. Non-primitive fields are compared using
- * this
object to unregister
+ * @param lhs {@code this} object to unregister
* @param rhs the other object to unregister
* @since 3.0
*/
@@ -170,7 +170,7 @@ public class EqualsBuilder implements Buildertrue
+ * @return 两个对象是否equals,是返回{@code true}
*/
public static boolean reflectionEquals(final Object lhs, final Object rhs, final Collectiontrue
+ * @return 两个对象是否equals,是返回{@code true}
*/
public static boolean reflectionEquals(final Object lhs, final Object rhs, final String... excludeFields) {
return reflectionEquals(lhs, rhs, false, null, excludeFields);
}
/**
- * Object
s
+ * AccessibleObject.setAccessible
to gain access to private
+ * equals()
.
If the TestTransients parameter is set to true
, transient
+ *
If the TestTransients parameter is set to {@code true}, transient
* members will be tested, otherwise they are ignored, as they are likely
- * derived fields, and not part of the value of the Object
.
Static fields will not be tested. Superclass fields will be included.
* - * @param lhsthis
object
+ * @param lhs {@code this} object
* @param rhs the other object
* @param testTransients whether to include transient fields
- * @return true
if the two Objects have tested equals.
+ * @return {@code true} if the two Objects have tested equals.
*/
public static boolean reflectionEquals(final Object lhs, final Object rhs, final boolean testTransients) {
return reflectionEquals(lhs, rhs, testTransients, null);
}
/**
- * This method uses reflection to determine if the two Object
s
+ *
This method uses reflection to determine if the two {@code Object}s * are equal.
* - *It uses AccessibleObject.setAccessible
to gain access to private
+ *
It uses {@code AccessibleObject.setAccessible} to gain access to private
* fields. This means that it will throw a security exception if run under
* a security manager, if the permissions are not set up correctly. It is also
* not as efficient as testing explicitly. Non-primitive fields are compared using
- * equals()
.
If the testTransients parameter is set to true
, transient
+ *
If the testTransients parameter is set to {@code true}, transient
* members will be tested, otherwise they are ignored, as they are likely
- * derived fields, and not part of the value of the Object
.
Static fields will not be included. Superclass fields will be appended * up to and including the specified superclass. A null superclass is treated * as java.lang.Object.
* - * @param lhsthis
object
+ * @param lhs {@code this} object
* @param rhs the other object
* @param testTransients whether to include transient fields
* @param reflectUpToClass the superclass to reflect up to (inclusive),
- * may be null
+ * may be {@code null}
* @param excludeFields array of field names to exclude from testing
- * @return true
if the two Objects have tested equals.
+ * @return {@code true} if the two Objects have tested equals.
* @since 2.0
*/
public static boolean reflectionEquals(final Object lhs, final Object rhs, final boolean testTransients, final Class> reflectUpToClass,
@@ -343,9 +343,9 @@ public class EqualsBuilder implements BuilderAdds the result of super.equals()
to this builder.
Adds the result of {@code super.equals()} to this builder.
* - * @param superEquals the result of callingsuper.equals()
+ * @param superEquals the result of calling {@code super.equals()}
* @return EqualsBuilder - used to chain calls.
* @since 2.0
*/
@@ -360,8 +360,8 @@ public class EqualsBuilder implements BuilderTest if two Object
s are equal using their
- * equals
method.
Test if two {@code Object}s are equal using their + * {@code equals} method.
* * @param lhs the left hand object * @param rhs the right hand object @@ -388,11 +388,11 @@ public class EqualsBuilder implements Builder
- * Test if two long
s are equal.
+ * Test if two {@code long} s are equal.
*
long
- * @param rhs the right hand long
+ * @param lhs the left hand {@code long}
+ * @param rhs the right hand {@code long}
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(final long lhs, final long rhs) {
@@ -404,10 +404,10 @@ public class EqualsBuilder implements BuilderTest if two int
s are equal.
Test if two {@code int}s are equal.
* - * @param lhs the left handint
- * @param rhs the right hand int
+ * @param lhs the left hand {@code int}
+ * @param rhs the right hand {@code int}
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(final int lhs, final int rhs) {
@@ -419,10 +419,10 @@ public class EqualsBuilder implements BuilderTest if two short
s are equal.
Test if two {@code short}s are equal.
* - * @param lhs the left handshort
- * @param rhs the right hand short
+ * @param lhs the left hand {@code short}
+ * @param rhs the right hand {@code short}
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(final short lhs, final short rhs) {
@@ -434,10 +434,10 @@ public class EqualsBuilder implements BuilderTest if two char
s are equal.
Test if two {@code char}s are equal.
* - * @param lhs the left handchar
- * @param rhs the right hand char
+ * @param lhs the left hand {@code char}
+ * @param rhs the right hand {@code char}
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(final char lhs, final char rhs) {
@@ -449,10 +449,10 @@ public class EqualsBuilder implements BuilderTest if two byte
s are equal.
Test if two {@code byte}s are equal.
* - * @param lhs the left handbyte
- * @param rhs the right hand byte
+ * @param lhs the left hand {@code byte}
+ * @param rhs the right hand {@code byte}
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(final byte lhs, final byte rhs) {
@@ -464,16 +464,16 @@ public class EqualsBuilder implements BuilderTest if two double
s are equal by testing that the
- * pattern of bits returned by doubleToLong
are equal.
Test if two {@code double}s are equal by testing that the + * pattern of bits returned by {@code doubleToLong} are equal.
* - *This handles NaNs, Infinities, and -0.0
.
This handles NaNs, Infinities, and {@code -0.0}.
* *It is compatible with the hash code generated by
- * HashCodeBuilder
.
double
- * @param rhs the right hand double
+ * @param lhs the left hand {@code double}
+ * @param rhs the right hand {@code double}
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(final double lhs, final double rhs) {
@@ -484,16 +484,16 @@ public class EqualsBuilder implements BuilderTest if two float
s are equal byt testing that the
+ *
Test if two {@code float}s are equal byt testing that the * pattern of bits returned by doubleToLong are equal.
* - *This handles NaNs, Infinities, and -0.0
.
This handles NaNs, Infinities, and {@code -0.0}.
* *It is compatible with the hash code generated by
- * HashCodeBuilder
.
float
- * @param rhs the right hand float
+ * @param lhs the left hand {@code float}
+ * @param rhs the right hand {@code float}
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(final float lhs, final float rhs) {
@@ -504,10 +504,10 @@ public class EqualsBuilder implements BuilderTest if two booleans
s are equal.
Test if two {@code booleans}s are equal.
* - * @param lhs the left handboolean
- * @param rhs the right hand boolean
+ * @param lhs the left hand {@code boolean}
+ * @param rhs the right hand {@code boolean}
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(final boolean lhs, final boolean rhs) {
@@ -519,7 +519,7 @@ public class EqualsBuilder implements BuilderReturns true
if the fields that have been checked
+ *
Returns {@code true} if the fields that have been checked * are all equal.
* * @return boolean @@ -529,11 +529,11 @@ public class EqualsBuilder implements BuilderReturns true
if the fields that have been checked
+ *
Returns {@code true} if the fields that have been checked * are all equal.
* - * @returntrue
if all of the fields that have been checked
- * are equal, false
otherwise.
+ * @return {@code true} if all of the fields that have been checked
+ * are equal, {@code false} otherwise.
* @since 3.0
*/
@Override
@@ -542,7 +542,7 @@ public class EqualsBuilder implements BuilderisEquals
value.
+ * Sets the {@code isEquals} value.
*
* @param isEquals The value to set.
* @return this
diff --git a/hutool-core/src/main/java/cn/hutool/core/map/multi/RowKeyTable.java b/hutool-core/src/main/java/cn/hutool/core/map/multi/RowKeyTable.java
new file mode 100644
index 000000000..0e8854896
--- /dev/null
+++ b/hutool-core/src/main/java/cn/hutool/core/map/multi/RowKeyTable.java
@@ -0,0 +1,272 @@
+package cn.hutool.core.map.multi;
+
+import cn.hutool.core.collection.IterUtil;
+import cn.hutool.core.collection.TransIter;
+import cn.hutool.core.util.ObjectUtil;
+import com.sun.istack.internal.Nullable;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Supplier;
+
+public class RowKeyTable