@Override
		public int compare(MemoryBlock b1, MemoryBlock b2) {

			switch (sortColumn) {
				case NAME:
					return b1.getName().compareToIgnoreCase(b2.getName());
				case START:
					return b1.getStart().compareTo(b2.getStart());
				case END:
					return b1.getEnd().compareTo(b2.getEnd());
				case LENGTH:
					return (int) (b1.getSize() - b2.getSize());
				case READ:
					return Boolean.compare(b1.isRead(), b2.isRead());
				case WRITE:
					return Boolean.compare(b1.isWrite(), b2.isWrite());
				case EXECUTE:
					return Boolean.compare(b1.isExecute(), b2.isExecute());
				case VOLATILE:
					return Boolean.compare(b1.isVolatile(), b2.isVolatile());
				case ARTIFICIAL:
					return Boolean.compare(b1.isArtificial(), b2.isArtificial());
				case OVERLAY:
					String ov1 = getOverlayBaseSpaceName(b1);
					String ov2 = getOverlayBaseSpaceName(b2);
					return ov1.compareTo(ov2);
				case INIT:
					return Boolean.compare(b1.isInitialized(), b2.isInitialized());

				//case BYTE_SOURCE: - handled by default comparator

				case SOURCE:
					String b1src = b1.getSourceName();
					String b2src = b2.getSourceName();
					if (b1src == null) {
						b1src = "";
					}
					if (b2src == null) {
						b2src = "";
					}
					return b1src.compareToIgnoreCase(b2src);

				case COMMENT:
					String comment1 = b1.getComment();
					String comment2 = b2.getComment();
					if (comment1 == null) {
						comment1 = "";
					}
					if (comment2 == null) {
						comment2 = "";
					}
					return comment1.compareToIgnoreCase(comment2);

				case BLOCK_TYPE:
					String bt1 = b1.getType().toString();
					String bt2 = b2.getType().toString();
					return bt1.compareToIgnoreCase(bt2);
				default:
					throw new RuntimeException("Unimplemented column comparator: " + sortColumn);
			}
		}
Create a new initialized block based on the given uninitialized block.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapModel.java