1.JavaçListå¦ä½å®ç°çº¿ç¨å®å
¨ï¼
2.Java低代码:jvs-list (子列表)表单回显及触发逻辑引擎配置说明
3.如何在java中创建一个不可变的源码list
4.java编程中对list集合进行排序的问题?
JavaçListå¦ä½å®ç°çº¿ç¨å®å ¨ï¼
JavaçListå¦ä½å®ç°çº¿ç¨å®å ¨ï¼Collections.synchronizedList(names);æçæé«ï¼çº¿ç¨å®å ¨
JavaçListæ¯æ们平æ¶å¾å¸¸ç¨çéåï¼çº¿ç¨å®å ¨å¯¹äºé«å¹¶åçåºæ¯ä¹ååçéè¦ï¼é£ä¹Listå¦ä½æè½å®ç°çº¿ç¨å®å ¨å¢ ï¼
å é
é¦å 大家ä¼æ³å°ç¨Vectorï¼è¿éæ们就ä¸è®¨è®ºäºï¼é¦å 讨论çæ¯å éï¼ä¾å¦ä¸é¢ç代ç
public class Synchronized{
private List<String> names = new LinkedList<>();
public synchronized void addName(String name ){
names.add("abc");
}
public String getName(Integer index){
Lock lock =new ReentrantLock();
lock.lock();
try {
return names.get(index);
}catch (Exception e){
e.printStackTrace();
}
finally {
lock.unlock();
}
return null;
}
}
synchronizedä¸å ï¼æè 使ç¨lock å¯ä»¥å®ç°çº¿ç¨å®å ¨ï¼ä½æ¯è¿æ ·çListè¦æ¯å¾å¤ä¸ªï¼ä»£ç éä¼å¤§å¤§å¢å ã
javaèªå¸¦ç±»
å¨javaä¸ææ¾å°èªå¸¦æ两ç§æ¹æ³
CopyOnWriteArrayList
CopyOnWrite åå ¥æ¶å¤å¶ï¼å®ä½¿ä¸ä¸ªListåæ¥çæ¿ä»£åï¼é常æ åµä¸æä¾äºæ´å¥½ç并åæ§ï¼å¹¶ä¸é¿å äºåè¿ä»£æ¶å对容å¨çå éåå¤å¶ãé常æ´éåç¨äºè¿ä»£ï¼å¨å¤æå ¥çæ åµä¸ç±äºå¤æ¬¡çå¤å¶æ§è½ä¼ä¸å®çä¸éã
ä¸é¢æ¯addæ¹æ³çæºä»£ç
public boolean add(E e) {
final ReentrantLock lock = this.lock; // å é åªå 许è·å¾éç线ç¨è®¿é®
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
// å建个é¿åº¦å 1çæ°ç»å¹¶å¤å¶è¿å»
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e; // èµå¼
setArray(newElements); // 设置å é¨çæ°ç»
return true;
} finally {
lock.unlock();
}
}
Collections.synchronizedList
Collectionsä¸æ许å¤è¿ä¸ªç³»åçæ¹æ³ä¾å¦
主è¦æ¯å©ç¨äºè£ 饰è 模å¼å¯¹ä¼ å ¥çéåè¿è¡è°ç¨ Collotionsä¸æå é¨ç±»SynchronizedList
static class SynchronizedList<E>
extends SynchronizedCollection<E>
implements List<E> {
private static final long serialVersionUID = -L;
final List<E> list;
SynchronizedList(List<E> list) {
super(list);
this.list = list;
}
public E get(int index) {
synchronized (mutex) { return list.get(index);}
}
public E set(int index, E element) {
synchronized (mutex) { return list.set(index, element);}
}
public void add(int index, E element) {
synchronized (mutex) { list.add(index, element);}
}
public E remove(int index) {
synchronized (mutex) { return list.remove(index);}
}
static class SynchronizedCollection<E> implements Collection<E>, Serializable {
private static final long serialVersionUID = L;
final Collection<E> c; // Backing Collection
final Object mutex; // Object on which to synchronize
è¿éä¸é¢çmutexå°±æ¯éç对象 å¨æ建æ¶åå¯ä»¥æå®éç对象 主è¦ä½¿ç¨synchronizeå ³é®åå®ç°çº¿ç¨å®å ¨
/
*** @serial include
*/
static class SynchronizedList<E>
extends SynchronizedCollection<E>
implements List<E> {
private static final long serialVersionUID = -L;
final List<E> list;
SynchronizedList(List<E> list) {
super(list);
this.list = list;
}
SynchronizedList(List<E> list, Object mutex) {
super(list, mutex);
this.list = list;
}
è¿éåªæ¯å举SynchronizedList ï¼å ¶ä»ç±»ç±»ä¼¼ï¼å¯ä»¥çä¸æºç äºè§£ä¸ã
æµè¯
public class Main {
public static void main(String[] args) {
List<String> names = new LinkedList<>();
names.add("sub");
names.add("jobs");
// åæ¥æ¹æ³1 å é¨ä½¿ç¨lock
long a = System.currentTimeMillis();
List<String> strings = new CopyOnWriteArrayList<>(names);
for (int i = 0; i < ; i++) {
strings.add("param1");
}
long b = System.currentTimeMillis();
// åæ¥æ¹æ³2 è£ é¥°å¨æ¨¡å¼ä½¿ç¨ synchronized
List<String> synchronizedList = Collections.synchronizedList(names);
for (int i = 0; i < ; i++) {
synchronizedList.add("param2");
}
long c = System.currentTimeMillis();
System.out.println("CopyOnWriteArrayList time == "+(b-a));
System.out.println("Collections.synchronizedList time == "+(c-b));
}
}
两è å é¨ä½¿ç¨çæ¹æ³é½ä¸ä¸æ ·ï¼CopyOnWriteArrayListå é¨æ¯ä½¿ç¨lockè¿è¡å é解éå®æå线ç¨è®¿é®ï¼synchronizedList使ç¨çæ¯synchronize
è¿è¡äºæ¬¡æ·»å åæ¶é´å¯¹æ¯å¦ä¸ï¼
å¯ä»¥çåºæ¥è¿æ¯ä½¿ç¨äºsynchronizeçéåå·¥å ·ç±»å¨æ·»å æ¹é¢æ´å å¿«ä¸äºï¼å ¶ä»æ¹æ³è¿éç¯å¹ å ³ç³»å°±ä¸æµè¯äºï¼å¤§å®¶æå ´è¶£å»è¯ä¸ä¸ã
Java低代码:jvs-list (子列表)表单回显及触发逻辑引擎配置说明
子列表新增表单默认回显主列表关联字段
1、子列表中进入新增页面配置
2、源码切换到表单设置,源码选择回显设置,源码进入回显逻辑引擎。源码
3、源码windows 的源码在画布中拖入对象变量节点,源码使用对象节点在打开页面时回显字段数据。源码参数名使用表单关联字段字段名,源码使用公式获取点击的源码主列表的行数据id。
二、源码列表关联列表,源码子列表底部按钮配置逻辑引擎
1、源码eclipse 链接源码在主列表中增加一个类型为“列表”的源码行内按钮,点击设计进入子列表设置页面。源码
2、弹出的页面中可配置子列表多个设置。
选择列表:可选择已存在的列表,或点击后面“+”号进行新列表页创建;也可点击编辑按钮对选择的子列表页进行编辑。子列表筛选条件在子列表页开启对应字段查询。
弹框标题:可设置弹出页面左上角显示所点击行数据的哪一个字段,可调整弹出页面的宽度大小。
数据过滤:设置主列表与子列表的关联关系。如果子列表行数据中的关联字段为下拉组件,那此处关联关系为子列表关联字段包含主列表-数据id,vector pushback 源码比如:订单明细表订单-包含-订单表数据id;如果子列表行数据中的关联字段为单行文本组件或流水号组件,那此处关联关系为子列表关联字段等于主列表字段,比如:学生表班级ID-等于-班级表班级ID。
查询条件:默认的查询条件,可设置不可编辑状态
按钮设置:可新增设置子列表页底部按钮,可配置按钮逻辑引擎事件。设置底部按钮后,勾选弹出页面行数据的多选框再点击底部按钮,会保存多选框的选中状态。
3、子列表行数据多选并修改处理方式:进入按钮逻辑引擎中,使用循环容器节点,cglib beancopier源码循环容器节点中设置通过公式获取勾选的行数据ID。此处获取到的行数据ID是字符串数组,需要使用函数转换为对象数组才能使用。
使用集合函数中的“ARRTOARROBJ”函数,数组转对象数组,比如:将["aaa","bbb","ccc","ddd"]转换为对象数组,第二个参数为对象的键值。配置保存后,回到列表页触发一次底部按钮。
回到逻辑引擎中,点击触发记录回溯触发的数据。
点击循环容器节点中的结构定义,然后点击引用测试,ss libev 源码自动解析传入节点的数据。此处自动解析的参数名“key”为上一步函数中自己设置的参数。
点击切换到循环画布,在循环画布中拖入要处理的节点,此处使用更新模型节点,循环根据对象数组更新每一行数据。
在线demo:frame.bctools.cn/
开源地址:gitee.com/software-mini...
列表类干货回顾
Java低代码核心引擎:jvs-list(列表引擎)功能(三)按钮配置与数据权限配置
Java低代码开发:jvs-list(列表引擎)功能(二)字段及样式配置
Java低代码开发:jvs-list(列表引擎)功能(一)配置说明
如何在java中创建一个不可变的list
在Java中创建一个不可变的List,可以使用Collections.unmodifiableList()方法。这个方法会返回一个不可变的视图,这意味着你不能在返回的列表上进行添加、删除或修改操作。
首先,
java
List originalList = Arrays.asList("Apple", "Banana", "Cherry");
List immutableList = Collections.unmodifiableList(originalList);
在上述代码中,我们首先创建了一个原始的List,然后使用Collections.unmodifiableList()方法创建了一个不可变的List。
现在,让我们详细解释一下这个过程:
在Java中,List是一个接口,它继承自Collection接口,用于存储元素的有序集合。List可以存储重复的元素,并且它允许存储null值。Java中的List接口有许多实现类,如ArrayList、LinkedList等。
当我们想要创建一个不可变的List时,我们可以使用Collections.unmodifiableList()方法。这个方法接受一个List参数,并返回一个不可变的视图。这个视图是一个新的List实例,它与原始的List有相同的内容,但是不能被修改。任何尝试修改这个不可变List的操作都会抛出UnsupportedOperationException异常。
值得注意的是,unmodifiableList()方法返回的仅仅是原始列表的一个视图,它并不会创建一个全新的列表。这意味着,如果原始列表在创建不可变列表之后被修改,那么这些修改也会反映在不可变列表中。因此,要确保原始列表在创建不可变列表后不再被修改,以保证不可变列表的真正不变性。
举个例子:
java
List originalList = new ArrayList>(Arrays.asList("Apple", "Banana", "Cherry"));
List immutableList = Collections.unmodifiableList(originalList);
// This will work fine
System.out.println(immutableList);
// This will throw UnsupportedOperationException
immutableList.add("Orange");
在这个例子中,我们试图向immutableList中添加一个元素。由于immutableList是一个不可变的List,所以这个操作会抛出UnsupportedOperationException异常。
java编程中对list集合进行排序的问题?
编写Java程序处理列表集合排序问题。
首先,定义学生类并实现Comparable接口。
学生类应能比较大小,通常基于计算机考试成绩和笔试成绩。
方法实现逻辑:如果计算机考试成绩相同,则以笔试成绩确定顺序。
学生类代码示例:
java
public class Student implements Comparable {
private int computerBasedScore;
private int paperBasedScore;
// 构造函数、getter和setter省略
@Override
public int compareTo(Student other) {
if (this.computerBasedScore == other.computerBasedScore) {
return Integer.compare(this.paperBasedScore, other.paperBasedScore);
}
return Integer.compare(this.computerBasedScore, other.computerBasedScore);
}
}
创建测试类,初始化列表并排序。
生成随机学生数据,加入列表。
执行排序操作。
查看排序结果。
示例排序结果:
java
List studentList = new ArrayList>();
// 添加个随机学生数据
Collections.sort(studentList);
排序后列表展示:
java
// 排序后的学生列表
在上述示例中,所有学生的数据类型应统一为整型(int)而非Integer,避免可能的类型转换问题。