精华内容
下载资源
问答
  • 快速找出两个对象集合中属性相等的对象 一般来说,出两个对象集合中属性相等的对象,我们常规方法是直接写两层for循环然后进行判断,代码如下: for (CameraInfoDto c : cameras) { for (String s : ...

    快速找出两个对象集合中属性相等的对象

    一般来说,找出两个对象集合中属性相等的对象,我们常规方法是直接写两层for循环然后进行判断,代码如下:

     for (CameraInfoDto c : cameras) {
     	for (String s : exsistPlate) {
        	 if (c.getCameraIndexCode().equals(s)) {
              	  CameraInfoDto cid = new CameraInfoDto();
                  cid.setCameraIndexCode(s);
                  cid.setCameraName(c.getCameraName());
                  cid.setRegionIndexCode(c.getRegionIndexCode());
                  list.add(cid);
               }
         }
    }
    

    如果遇到集合中的数据特别多的时候,运行效率会特别低,因此,使用HashMap进行优化,优化代码如下:

     List<CameraInfoDto> list = new ArrayList<>();
     Map<String, CameraInfoDto> cameraInfoMap = Maps.newHashMap();
     cameras.forEach(cameraInfoDto -> {
     	cameraInfoMap.put(cameraInfoDto.getCameraIndexCode(), cameraInfoDto);
                });
     for (String cameraIndexCode : exsistPlate) {
    	 if (cameraInfoMap.containsKey(cameraIndexCode)) {
          		 CameraInfoDto c1 = cameraInfoMap.get(cameraIndexCode);
                 CameraInfoDto cameraInfoDto = new CameraInfoDto();
                 cameraInfoDto.setCameraName(c1.getCameraName());
                 cameraInfoDto.setRegionIndexCode(c1.getRegionIndexCode());
                 cameraInfoDto.setCameraIndexCode(cameraIndexCode);
                 list.add(cameraInfoDto);
          }
     }
    

    使用map之后,相比双层for循环,集合中的元素只用比较一次,不用重复进行比较,效率提高了很多

    展开全文
  • List中根据对象字段快速查找对象

    千次阅读 2020-09-02 11:00:20
    import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List;... * List中根据对象字段快速查找对象 * @date 2020-05-12 9:47 */ public class FSearchUtil { private StringBuffer.
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * List中根据对象字段快速查找对象
     * @date 2020-05-12 9:47
    
     */
    public class FSearchUtil {
    
        private StringBuffer mKeyWordString = new StringBuffer();
        private List<Object> mSearchObjs = new ArrayList<>();
        private int[] mIndexes;
    
        public FSearchUtil(List<? extends Object> objects, String... fields) throws Exception {
            super();
            init(objects, fields);
        }
    
        private void init(List<? extends Object> objs, String... fields) throws Exception {
            if (objs != null) {
                mKeyWordString.setLength(0);
                mSearchObjs.clear();
                mSearchObjs = new ArrayList<>(objs);
                mIndexes = new int[mSearchObjs.size() * 2];
                int index = 0;
                for (int i = 0; i < mSearchObjs.size(); i++) {
                    Object info = mSearchObjs.get(i);
                    // 指定要搜索的字段
                    String searchKey = getSearchKey(info, fields);
                    // 将该字符串在总字符串中的起终位置保存下来,位置是索引值而非长度
                    int length = mKeyWordString.length();
                    mIndexes[index] = length;
                    mKeyWordString.append(searchKey);
                    length = mKeyWordString.length();
                    index++;
                    // 保存新加搜索字段的索引值
                    mIndexes[index] = (length > 0) ? length - 1 : 0;
                    index++;
                }
            }
        }
    
        /**
         * 通过反射从对象中取出指定字段的值
         */
        private String getSearchKey(Object obj, String... fields) throws Exception {
            StringBuilder searchKeys = new StringBuilder();
            Class<? extends Object> clazz = obj.getClass();
            try {
                for (String str : fields) {
                    // 搜索字段使用空格隔开
                    Field f = clazz.getDeclaredField(str);
                    f.setAccessible(true);
                    Object val = f.get(obj);
                    searchKeys.append(val).append(" ");
                    f.setAccessible(false);
                }
            } catch (Exception e) {
                throw new Exception("取值异常:" + e.getMessage());
            }
            return searchKeys.toString();
        }
    
        /**
         * 搜索结果
         *
         * @param keyWords
         *            搜索的关键字,要去掉首尾的空格
         * @return 返回搜索到的对象
         */
        public List<Object> searchTasks(String keyWords) {
            List<Object> searchedTask = new ArrayList<>();
            int[] searchIndex = getSearchIndex(keyWords);
            for (int index : searchIndex) {
                if (index != -1 && index < mSearchObjs.size() * 2) {
                    Object info = mSearchObjs.get(index / 2);
                    if (info != null && !searchedTask.contains(info)) {
                        searchedTask.add(info);
                    }
                }
            }
            return searchedTask;
        }
    
        /**
         * 找到匹配的索引数据
         *
         * @param keyWords
         *            搜索的关键字
         * @return 在初始化的索引数组的下标数组
         */
        private int[] getSearchIndex(String keyWords) {
            Pattern pattern = Pattern.compile(keyWords, Pattern.CASE_INSENSITIVE | Pattern.LITERAL);
            Matcher matcher = pattern.matcher(mKeyWordString.toString());
            ArrayList<Integer> searchResult = new ArrayList<>();
            while (matcher.find()) {
                // 不宜在此处再做循环,否则可能造成循环次数过多错误
                searchResult.add(matcher.start());
            }
            int[] searchIndexes = new int[searchResult.size()];
            for (int i = 0; i < searchIndexes.length; i++) {
                int findIndex = findIndex(searchResult.get(i));
                searchIndexes[i] = (findIndex / 2) * 2;
            }
            return searchIndexes;
        }
    
        /**
         * 使用二分法找到指定字符位置在索引数组中的位置
         *
         * @param charAt
         *            字符在整个字符串中的位置
         * @return 在索引数组中的位置
         */
        private int findIndex(int charAt) {
            int low = 0;
            int high = mIndexes.length - 1;
            int mid = -1;
            while (low <= high) {
                mid = (low + high) >>> 1;
                int midVal = mIndexes[mid];
                if (midVal < charAt) {
                    low = mid + 1;
                } else if (midVal > charAt) {
                    high = mid - 1;
                } else {
                    return mid;
                }
            }
            return mid;
        }
    
    
    
    // 使用样例
    FSearchUtil tool = new FSearchUtil(outList, "userName", "deptName", "orgName");
    tool.searchTasks(keyword);
    展开全文
  • JVM快速找出耗内存大对象

    千次阅读 2020-03-05 12:02:55
    1.找到进程号 ,使用top命令查看应用的系统的整体负载 load average: 1.单核CPU, 数字在0.00-1.00之间正常 0.00-1.00 之间的数字表示此时路况非常良好,没有拥堵,车辆可以毫无阻碍地通过。 1.00 表示道路还算...

    1.找到进程号 ,使用top命令查看应用的系统的整体负载

    load average:

     1.单核CPU, 数字在0.00-1.00之间正常
     0.00-1.00        之间的数字表示此时路况非常良好,没有拥堵,车辆可以毫无阻碍地通过。
    1.00  表示道路还算正常,但有可能会恶化并造成拥堵。此时系统已经没有多余的资源了,管理员需要进行优化。
    1.00以上 表示路况不太好了,这种情况你必须进行检查了。
    2.多核CPU - 多车道      数字/CPU核数 在0.00-1.00之间正常
     

    三个数字分别代表1分钟,5分钟,15分钟 

    KiB Mem 和KiB Swap如果没有这两行 键入m会显示出这两行

    2.执行如下命令: jmap -histo:live 10293| head -20 查看进程中占用资源最大的前20个对象

    3.如果还找不出来就只有使用eclipse的MAT工具进行分析

    ①:使用jmap生成快照文件

    jmap -dump:live,format=b,file=a.hprof pid

    ②:下载MAT  使用MAT打开快照文件进行分析

     

    如果是在程序的JVM参数中设置了

    这两个参数可以直接 查看OOM日志

    参考文章

     https://blog.csdn.net/zhangchenglikecc/article/details/52103737

      https://www.jianshu.com/p/931384b89c4d

    https://blog.csdn.net/dickzhu/article/details/84920297

    展开全文
  • id: document.getElementById("...找到所有的标签,返回一个数组(对象的集合); 如:document.getElementsByTagName("div");找到所有的div标签//数组; 对象.document.getElementsB...

    id: document.getElementById("id名字");通过id查找;

    标签:document.getElementsByTagName("标签名字");找到所有的标签,返回一个数组(对象的集合);

            如:document.getElementsByTagName("div");找到所有的div标签//数组;

            对象.document.getElementsByTagName("标签名字");

    name: document.getElementsByName("name名");集合//数组

    className: document.getElementByClassName("class名"); 集合//数组【只适用于firefox】

    img: document.images; 获取所有图片,返回集合//数组;

    link: document.links;获取所有链接对象,返回集合//数组;

    form: document.forms;获取表单对象,返回集合//数组;

    body: document.body;标签对象

    document.documentElement;:HTML对象;

    event:时间信息对象;

    this:当前对象;

    展开全文
  • php /* *用穿越火线快速入门php面向对象! *php目前已经成为国内的主流web developer的首选开发语言,其强大的面向对象容易使初学者不到思绪,一头雾水! *,借助此文希望对初学者有所帮助,假设Crossfire用php来开发. *...
  • C4D整理工程技巧经验,C4D快速对象放到最顶部,C4D快速找到对象位置。 答案: 在对象窗口和视图窗口按s键可以快速定位对象的位置。 这个大部分人都已经知道了,还有个小技巧就是 选中某个对象的时候,在对象...
  • 读书的时候,父母叫我们认真读书,暂时不要谈恋爱,不要影响学习,等大学...桃花院长告诉你,如何快速找到对象。 1,像找工作时候的热情那样来找对象 2,要准备好“简历”,了解自己并清楚自己对另一半的诉求,比如
  • var arrTwo = [] sameArr () { return arrOne.filter(item => { return arrTwo.findIndex(subItem => { return subItem.id == item.id }) === -1 }) } 出两个数组重复的value let arrOne = [1, 2, 3, 4, 9] let ...
  • jdk1.8如何找到List集合中重复对象

    千次阅读 2019-07-25 16:32:27
    List里对象属性特别多,而且可能有变化,如何快速的过滤数据… jdk 1.8以后对集合操作提供了流对象的便捷操作,可以实现以上需求,废话不多说,程序猿还是直接看代码直观一些!!!! 第一步、利用lombokjar包里的...
  • **例如:找到 objList 中 name是 demo1 demo2 demo 的对象 并返回 例如返回结果为:[{name:‘demo1’,value:1},{name:‘demo2’,value:2},{name:‘demo3’,value:3}] ** var list = ['demo1','demo2','demo3'] var ...
  • * 判断两个对象中的值哪些修改了 * @param object1 * @param object2 * @param <T> * @return */ public static <T> HashMap<String,Object> classIsEqual(T object1, T object2){ HashMap...
  • let price = null; goodsData.spec_data && goodsData.spec_data.some(item => { for (const key in specData) { if (Object.hasOwnProperty.call(specData, key)) { if (specData[key] !...
  • Js 查找数组对象中的值

    千次阅读 2021-01-13 10:08:15
    在示例数组中,如果需要通过某对象的名称来或者对应对象的id。简单来说,就是获取小明的id值。 var array = [ { name: "小明", id: 1}, { name: "小吉", id: 2} ]; 方法: let obj = array.find(o => o....
  • 如何快速抓取对象数组中某个属性的Key的集合? 输入数据格式如下 ,要求抓取operations之所有Key的不重复的集合, 形如[‘free’,‘close’]等。 const data = [ {id: 1, label: '全部', billStatus: 'all...
  • 找到对象数组中指定的值var array = [ { label: "Custom", value: "0" }, { label: "Admin", value: "1"} ]要找到array中value为0的label值var a = array.find(item => item.value == 0);var lab...
  • PS如何快速使用对象选择工具抠图?

    千次阅读 2020-07-30 07:34:14
    补充:如在软件左边工具栏中没有找到对象选择工具,则在菜单栏中点击编辑-->工具栏,如下图所示。 清除附加工具,在工具栏中把对象选择工具拉到附加工具栏中,点击完成,就可以使用对象选择工具进行抠图。 ...
  • 对List对象列表属性值的快速搜索

    千次阅读 2017-03-12 19:29:14
    对于数据的搜索已有很多成熟的方案,比如Apace Lucene框架,结合ikanalyer等分词器能实现很复杂和高效的搜索,或直接使用sql语言对数据库关键字进行搜索等。 ...对List对象列表属性值的快速搜索
  • 我们在做业务逻辑代码书写的时候,经常会遇到这样的问题:用户修改了原来的值,提交给后台以后,后台不仅要更新这条数据的值,有时候还要记录用户做了什么修改,毕竟如果将来出现业务上的问题时,我们可以出用户的...
  • 快速找到一组数据中的特定类型的关联。 通过数据的结构方式,这将与返回与指定标签匹配的Node的关系一样简单。 找到间接关联的关联级别,以便做出决定或推荐。 为了快速找到这些关联,将使用专门的深度优先。 ...
  • 方法 使用common-utils包提供的...比如id属性值为9587的用户 Object obj = CollectionUtils.find(UserList.get(), new BeanPropertyValueEqualsPredicate("id", "9587")); if(obj...
  • 同样的假如你的数组是个对象数组: 15 var objArr = [{ 16 name: '小王' , 17 age: 14 18 },{ 19 name: '大王' , 20 age: 41 21 },{ 22 name: '老王' , 23 age: 61 24 }] 25 26 ...
  • 对象在堆内存中的存储布局是怎样的?

    万次阅读 多人点赞 2021-05-12 23:35:33
    在 Hotspot 虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Object Header)、实例数据(Instance Data)和对齐填充(Padding)。 补充 对象头(Object Header) HotSpot 的对象头由Mark Word和类型指针组成。 ...
  • js获取对象中的所有key

    千次阅读 2020-04-24 10:37:14
    情况:不知对象里有哪些key,可以通过以下方法遍历,使我们快速得知对象所含key /* object:对象名字(要遍历的对象) obj:临时变量名 (对象里的key) */ for(var obj in object){ alert(obj); } ...
  • 今天闲来无事,有空闲的时间,所以想坐下来聊一聊Java的GC以及Java对象在内存中的分配。 和标题一样,本篇绝对是用最直接最通俗易懂的大白话来聊 文章中基本不会有听起来很高大上专业术语,也不会有太多概念性的...
  • Java引用对象

    千次阅读 2018-12-11 10:09:03
    这种情况下,JVM会先试图去为这个对象找足够的堆空间–在32位JVM上大约12 bytes,如果可以分配出空间,就调用 Integer 的构造函数, Integer 的构造函数会解析传入的String然后初始化这个新创建的对象。最后,JVM在...
  • 我有一个未命名的对象数组,其中包含一个命名对象的数组,我需要获取“名称”是“字符串1”的对象。这是一个示例数组。 var array = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", ...
  • 现在有一个数组对象,也就是数组元素是对象类型,现在的需求是根据对象的某个属性值,找到该数组对应的元素(对象),比如根据"bianma"=="11",找到对应的"name"为"商品房" : 该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 417,757
精华内容 167,102
关键字:

怎样快速找到对象